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

时间:2011-04-20 22:53:25

标签: javascript

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

alert(my_obj.getFoo());

为什么getFoo是函数而不是value

2 个答案:

答案 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控制台。