2013-04-22 76 views
0

我試圖創建一個簡單的Person對象,它的原型的屬性之一將是一個對象,但是這似乎並不可能,因爲範圍的變更。的Javascript原型屬性定義爲對象

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來分配範圍,但我不太喜歡這個解決方案。

感謝您對我的#2的第一個問題花費時間。

回答

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/

+0

是啊,我知道,解決方案,以及。但問題是如果可以使me.update.name('John')不使用應用程序或調用而工作。 – Knorcedger 2013-04-22 09:32:56