【问题标题】:javascript use a function as a variable (getter)javascript使用函数作为变量(getter)
【发布时间】:2015-07-30 12:40:22
【问题描述】:

我只是想以这种方式在 javascript 中获取“getter”

var Product = function(){
  var self = this; 
  var _id = function() { 
    return self.styleCode + '-' + self.materialCode + '-' + self.colourCode; 
  }
  self.materialCode = ''
  self.colourCode = ''
  ..
  self.id = _id()
}
..
var obj = new Product();
//.. initialize properies
obj.id // = "--"

但它似乎并不像我相信的那样每次都调用该函数。 我尝试使用这个Javascript: Use function as variable 类似的东西

var Product = function(){
  var self = this; 
  self.materialCode = ''
  self.colourCode = ''
  ..
  get self.id() { return self.materialCode + '-' + self.colourCode; }
}   

但我在 get 关键字上遇到异常。 任何的想法? 谢谢

【问题讨论】:

  • get self.id() { ... } --- 这段代码是什么意思?
  • get 不是跨浏览器。此保留字并非在所有浏览器中都运行。我尝试为您提供另一种解决方案,我正在寻找它
  • @zerkms 查看帖子中的链接
  • @MarcosPérezGude 它适用于所有现代浏览器
  • 如果你look more closely,这个语法用在对象初始化器中;我不知道它是否会在函数声明中起作用。此外,浏览器必须支持它。

标签: javascript getter


【解决方案1】:

您可以在self 上定义id 属性,使用Object.defineProperty,像这样

Object.defineProperty(self, 'id', {
    get: function () {
      return self.materialCode + '-' + self.colourCode;
    }
});

你可以从MDN看到this example,供参考。

【讨论】:

  • 谢谢这个作品,有没有浏览器兼容性问题?
  • @DevT:是的,不支持 IE8 及以下版本。请参阅 MDN 文章。
  • @Mouser 这不好..所以这是做 getter 的更好方法,但它在 IE8 及更低版本上不受支持。
  • @DevT,是的,现代网站不应该再支持那些旧浏览器了。 Windows 10 即将到来。是时候告别 IE10 之前的所有 IE 浏览器了。但是 IE8 的 DOM 节点支持 get 和 set。
【解决方案2】:

使用Object.defineProperty on MDN

var Product = function(){
  var self = this; 
  self.materialCode = ''
  self.colourCode = ''

  Object.defineProperty(self, "id", {
        //printing the full code here
        get : function(){return self.materialCode + '-' + self.colourCode;},
        set : function(value){ null },
        enumerable : false,
        configurable : false
        //this is the default set up for Object.defineProperty when using getters and setters,
        //those two other properties default to false.
  });
}

var obj = new Product();
obj.materialCode = 124;
obj.colourCode = 5783;
alert(obj.id);

只需使用obj.id 调用即可。

您可以设置setget 功能。并将其用作普通的属性声明。我敦促您阅读 MDN 上的文章以了解更多关于可能性的信息。

【讨论】:

    【解决方案3】:

    getter 和 setter 的制作方式不同

    使用此代码

    self.id = _id();
    

    您存储在 self.id 构造函数中调用的 _id() 返回值

    使用此代码

    get self.id()
    

    你正在声明一个带参数的getter(正确的方式get id()

    在这里您可以找到有关 getter/setter 的有用信息,不要忘记 firefox GETTERSETTER

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get

    保持警告!此代码在非firefox浏览器中不起作用!

    【讨论】:

      【解决方案4】:

      是另一种方式

      var xvar = new function(id){ 
          this.toString = this.valueOf = function() {
               return $(id).width();
          };
      }('#y');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-01
        • 2013-12-23
        • 2021-03-01
        • 1970-01-01
        • 2012-07-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多