如果你的意思是你想要的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