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