我有一个使用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引擎的早期版本中确实有效,但似乎最新的版本现在还没有允许它。
答案 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();