var my_obj = Object.create({}, {
getFoo: {
value: function() {
return this.foo;
}
}
});
my_obj.foo = 1;
alert(my_obj.getFoo());
为什么getFoo
是函数而不是value
?
答案 0 :(得分:4)
因为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;
}
}
});
答案 1 :(得分:0)
实际上......它只是因为你将值设置为等于函数。
如果您试图匿名运行该功能,则必须在声明后包含该功能。观察:
x = { y : function(){return 2;}}
x.y
function (){return 2;}
x = {y : function(){return 2;}()}
x.y
2
注意函数声明后的尾部()。
很抱歉1行代码来自javascript控制台。