0

我正在尝试创建一个简单的 Person 对象,它的原型属性之一将是一个对象,但这似乎不可能,因为范围发生了变化。

var Person = function() {};

Person.prototype.set = function(data) {
    this.data = data;
};

Person.prototype.update = {
    name: function(name) {
        this.data.name = name;
    }
};

var me = new Person();
me.set({name: 'Achilleas'});
me.update.name('John');

你也可以在这个jsFiddle上运行它

我想要实现的目标可能吗?我知道我可以通过使用 apply 分配范围来做到这一点,但我不太喜欢这个解决方案。

感谢您花时间回答我关于 Stackoverflow 的第一个问题。

4

1 回答 1

1

您遇到的问题是因为this将引用创建并分配给update属性的对象文字。它不指人。this.data.name因此,由于对象文字没有数据属性,因此引用会产生错误。

我建议只扩展 的原型Person以包含一个更新方法,该方法需要一个要更新的属性和一个值。也添加data为 person 的属性。

var Person = function() {
   this.data = {};
};

Person.prototype.set = function(data) {
    this.data = data;
};

Person.prototype.update = function(property, value){
   this.data[property] = value;
};

var me = new Person();
me.set({name: 'Achilleas'});
me.update('name','John');

工作示例 http://jsfiddle.net/fj5uY/7/

于 2013-04-22T09:05:20.673 回答