如果你的意思是你想要的home
屬性引用才能夠得到某種方式從屬性名稱的字符串"home"
沒有硬編碼則沒有,據我所知這是不可能的函數中。
在你想達到什麼目的只是猜測,會是這樣的幫助至少一點點:
function callHome(propName) {
return function(options) {
this._home(propName, options);
}
}
var someObj = {
home: callHome('home'),
login: callHome('login')
}
someObj.home({some:"option"});
至少這樣你就不必重複相同的函數體爲每個屬性。演示:http://jsfiddle.net/EeEAw/
注:我假設_home()
函數調用,但在問題沒有定義會在真實世界中的代碼定義的地方。我沒有在我的回答中顯示它,儘管我在我的小提琴中創建了一個虛擬的。
正如順便說一句,請注意該函數並不真正「屬於」對象或財產 - 還有什麼能阻止你做這樣的事情:
var obj = {
test : "test",
home : function() {
alert(this.test);
}
};
var funcRef = obj.home;
var obj2 = {
method1 : funcRef
}
obj.home = null;
funcRef();
obj2.method1();
也就是說,你可以創建對同一個函數的多個引用,並且即使原始obj.home
屬性設置爲某個其他值(只要其他引用繼續存在),該函數也將繼續存在。
Ooops,你不能動態設置這樣的對象屬性。 'home:callHome('home')'拋出一個typeError(試圖調用不是函數的東西),因爲沒有'_home'屬性。 – RobG 2012-08-01 06:03:43
@RobG - 我認爲OP會提供'_home'屬性,因爲它沒有在問題中顯示,但在我的jsfiddle演示中,我確實提供了一個樣本'_home'。話雖如此,實際上你在創建對象時不會出錯 - 在對象文本中使用'home:callHome('home')'沒有問題,因爲'callHome()'不使用缺少的'_home '屬性,它返回使用'_home'的另一個函數。如果你試圖說'someObj.home()',那麼你只會在稍後遇到問題,並且此時還沒有'_home'函數。 – nnnnnn 2012-08-01 06:05:55
是的,當您嘗試調用它時發生錯誤。 – RobG 2012-08-01 06:14:48