我有一个问题,我想在javascript中创建一个'hook',所以我创建了一个小函数来完成它。
这是我的代码:
GoogleMaps.prototype.callUserFunc = function( func, args ){
eval('GoogleMaps.' + func + '.apply(func, args)');
}
我遇到的问题是我真的不想使用eval()函数,有没有更好的方法呢?
我为这个noobish问题道歉,我的javascript有点偏差。
谢谢!
答案 0 :(得分:4)
您可以使用方括号表示法来访问对象的属性。
示例:
var x = {
someProperty: 5
};
console.log(x["someProperty"]); // => 5
console.log(x.someProperty); // => 5
var y = 'someProperty';
console.log(x[y]); // => 5
x["someProperty"]
与x.someProperty
相同。
你可以这样使用它。
GoogleMaps.prototype.callUserFunc = function( func, args ){
GoogleMaps[func].apply(func, args);
}
答案 1 :(得分:3)
GoogleMaps.prototype.callUserFunc = function( func, args ){
GoogleMaps[func].apply(func, args);
//eval('GoogleMaps.' + func + '.apply(func, args)');
}
答案 2 :(得分:1)
真正的passthrough函数将返回函数返回的值,并将在GoogleMaps
的上下文中调用。
您的主要问题是不知道可以在任何对象上使用数组访问表示法:
GoogleMaps.prototype.callUserFunc = function(func, args) {
return GoogleMaps[func].apply(GoogleMaps, args);
};
但是,一般来说,编写代码可能会更好:
GoogleMaps[func](...args...);
但是这一切都假定GoogleMaps
包含静态可访问的函数,并且不用作实例化对象的构造函数。
在不知道如何使用GoogleMaps
的情况下,您的passthrough函数可能正在执行callUserFunc
被调用的对象实例:
GoogleMaps.prototype.callUserFunc = function(func, args) {
return this[func].apply(this, args);
};