Javascript Eval代码问题

时间:2012-11-05 16:17:48

标签: javascript oop eval user-defined-functions

我有一个问题,我想在javascript中创建一个'hook',所以我创建了一个小函数来完成它。

这是我的代码:

GoogleMaps.prototype.callUserFunc = function( func, args ){
  eval('GoogleMaps.' + func + '.apply(func, args)');
}

我遇到的问题是我真的不想使用eval()函数,有没有更好的方法呢?

我为这个noobish问题道歉,我的javascript有点偏差。

谢谢!

3 个答案:

答案 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);
};