gpt4 book ai didi

javascript - 调用函数所以不需要

转载 作者:行者123 更新时间:2023-11-30 17:33:05 26 4
gpt4 key购买 nike

我有一个使用 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

如您所见,这两种方法都不允许我在不先添加 this 的情况下调用 method。是否有某种方法可以执行一个函数,以便以不需要添加 this 的方式设置它的上下文?

编辑

这在以前版本的 v8 引擎中确实有效,但似乎最新版本现在不允许这样做。

最佳答案

"The client's write rules which are the strings loaded from the database, and it was a requirement (who knows why) that they only need to write the function names and the application sorts out the scoping."

如果你没有在严格模式下运行,你可以使用 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();

关于javascript - 调用函数所以不需要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22593611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com