我有一个问题,我想在 javascript 中创建一个“钩子”,所以我创建了一个小函数来做到这一点。
这是我的代码:
GoogleMaps.prototype.callUserFunc = function( func, args ){
eval('GoogleMaps.' + func + '.apply(func, args)');
}
我遇到的问题是我真的不想使用 eval() 函数,有没有更好的方法呢?
我为这个愚蠢的问题道歉,我的 javascript 有点糟糕。
谢谢!
我有一个问题,我想在 javascript 中创建一个“钩子”,所以我创建了一个小函数来做到这一点。
这是我的代码:
GoogleMaps.prototype.callUserFunc = function( func, args ){
eval('GoogleMaps.' + func + '.apply(func, args)');
}
我遇到的问题是我真的不想使用 eval() 函数,有没有更好的方法呢?
我为这个愚蠢的问题道歉,我的 javascript 有点糟糕。
谢谢!
您可以使用方括号表示法来访问对象的属性。
例子:
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);
}
GoogleMaps.prototype.callUserFunc = function( func, args ){
GoogleMaps[func].apply(func, args);
//eval('GoogleMaps.' + func + '.apply(func, args)');
}
真正的直通函数将返回该函数返回的值,并将在GoogleMaps.
您的主要问题是不知道可以在任何对象上使用数组访问表示法:
GoogleMaps.prototype.callUserFunc = function(func, args) {
return GoogleMaps[func].apply(GoogleMaps, args);
};
不过,总的来说,您最好将代码编写为:
GoogleMaps[func](...args...);
但这一切都假设GoogleMaps包含静态可访问的函数,并且没有被用作实例化对象的构造函数。
在不知道如何GoogleMaps使用的情况下,您的传递函数可能应该在callUserFunc被调用的对象实例之外执行:
GoogleMaps.prototype.callUserFunc = function(func, args) {
return this[func].apply(this, args);
};