为什么这个特定的JavaScript代码以这种方式工作?

为什么这个特定的JavaScript代码以这种方式工作?

问题描述:

var my_obj = Object.create({}, { 
    getFoo: { 
     value: function() { 
      return this.foo; 
     } 
    } 
}); 
my_obj.foo = 1; 

alert(my_obj.getFoo()); 

为什么getFoo的功能代替了value为什么这个特定的JavaScript代码以这种方式工作?

由于Object.createproperty descriptors作为输入:

propertiesObject

如果指定,而不是undefined,一个对象,其可枚举自己的属性(即,沿着它的原型在其自身定义的那些性质,而不是枚举的属性链)指定要添加到新创建的对象的属性描述符以及相应的属性名称。

value指:

value
与属性相关联的值。 (仅限数据描述符)。默认为undefined

但作为getFoo暗示,它可能是更好的将其定义为访问属性

var my_obj = Object.create({}, { 
    foo: { 
     get: function(){ 
      return this._foo; }, 
     set: function(newValue){ 
      this._foo = newValue; 
     } 
    } 
}); 

其实..它只是因为你设置的值等于一个功能。

如果您尝试以匿名方式运行该功能,则必须在声明后包含该功能。观察:

x = { y : function(){return 2;}} 

x.y 
function(){return 2;} 

x = {y : function(){return 2;}()} 

x.y 
2 

注意函数声明后的尾部()。

对不起1行代码,来自javascript控制台。