为什么这个特定的JavaScript代码以这种方式工作?
问题描述:
var my_obj = Object.create({}, {
getFoo: {
value: function() {
return this.foo;
}
}
});
my_obj.foo = 1;
alert(my_obj.getFoo());
为什么getFoo
的功能代替了value
?为什么这个特定的JavaScript代码以这种方式工作?
答
由于Object.create
取property 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控制台。