Javascript原型属性定义为对象

时间:2013-04-22 08:59:40

标签: javascript prototypal-inheritance

我正在尝试创建一个简单的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上的第一个问题。

1 个答案:

答案 0 :(得分:1)

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

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

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/