调用函数所以这不需要

时间:2014-03-23 16:29:00

标签: javascript function

我有一个使用v8 javascript引擎的应用程序,在其中我将函数添加到从数据库执行代码行的命名空间对象。在每次函数调用之前,这些函数的内容不需要添加this。以下是我的问题的一些示例代码

var obj = {};
obj.method = function(a) { return a; }
obj.executor = function() { return method(5); }
obj.executor()
ReferenceError: method is not defined

var caller = function() { return method(5); }
caller.call(obj)
ReferenceError: method is not defined

正如您所看到的,如果没有先添加method,我就无法致电this。有没有办法执行一个函数,以便它的上下文设置为不需要添加this

修改

这在v8引擎的早期版本中确实有效,但似乎最新的版本现在还没有允许它。

1 个答案:

答案 0 :(得分:2)

  

“客户端的写规则是从数据库加载的字符串,它是一个要求(谁知道为什么),他们只需要编写函数名称,应用程序就可以对范围进行排序。” EM>

如果您未在严格模式下运行,则可以使用with语句。

var obj = {};
obj.method = function(a) { return a; };
obj.executor = function() { 
    with (this) {
        return method(5);
    }
};
obj.executor();

var caller = function() { 
    with (this) {
        return method(5); 
    }
};

caller.call(obj);

不是说这是一个很好的解决方案,但如果符合要求,它就会起作用。


我不知道你的其他要求,但你也可以通过闭包来实现这一点。

var obj = {};

(function() {
    var method = obj.method = function(a) { return a; };
    obj.executor = function() { 
        return method(5);
    };
}();

obj.executor();