Javascript 替换新函数中的arguments.callee
一些字符串通过Javascript 替换新函数中的arguments.callee,javascript,function,self-reference,Javascript,Function,Self Reference,一些字符串通过新函数(…)调用转换为函数 如何在不使用参数的情况下在字符串中获取此函数的引用。被调用方 var f = new Function('return arguments.callee.smth'); f.smth = 128; f(); // 128 这样做的唯一方法是使用闭包 例如: var f = (function () { var f = new Function('return this().smth').bind(function () { return f });
新函数(…)
调用转换为函数
如何在不使用参数的情况下在字符串中获取此函数的引用。被调用方
var f = new Function('return arguments.callee.smth');
f.smth = 128;
f(); // 128
这样做的唯一方法是使用闭包 例如:
var f = (function () {
var f = new Function('return this().smth').bind(function () { return f });
return f;
})();
f.smth = 128;
f();
大约:
var f = (function (g) {
return function f() {
return g.apply(f, arguments)
};
})(new Function('return this.smth'));
f.smth = 128;
f();
无论如何,看起来像是参数。被调用方在构造的函数中工作,而不考虑严格模式
有关该主题的其他链接:
-
使用arguments.callee时没有好的选择
但是,在下面这样的情况下,对于
参数.callee
,没有替代方法,因此它的弃用可能是一个bug(请参见bug)
做这件事的唯一方法是使用闭包
例如:
var f = (function () {
var f = new Function('return this().smth').bind(function () { return f });
return f;
})();
f.smth = 128;
f();
大约:
var f = (function (g) {
return function f() {
return g.apply(f, arguments)
};
})(new Function('return this.smth'));
f.smth = 128;
f();
无论如何,看起来像是参数。被调用方在构造的函数中工作,而不考虑严格模式
有关该主题的其他链接:
-
使用arguments.callee时没有好的选择
但是,在下面这样的情况下,对于
参数.callee
,没有替代方法,因此它的弃用可能是一个bug(请参见bug)
你不能。为什么需要这样做(您使用函数
构造函数的目的是什么)?请提供您的实际代码,以便我们为您的问题提出一个合适的解决方案。也许可以看看如何将值传递到构造函数的作用域中。@Bergi,实际上我想这样做,但关于通过生成函数本身获取自引用的想法对我来说似乎很有趣。如果您删除此问题,“还是我们应该回答这是不可能的?”贝基回答。但答案对于课堂提问是无用的,你不能。为什么需要这样做(您使用函数
构造函数的目的是什么)?请提供您的实际代码,以便我们为您的问题提出一个合适的解决方案。也许可以看看如何将值传递到构造函数的作用域中。@Bergi,实际上我想这样做,但关于通过生成函数本身获取自引用的想法对我来说似乎很有趣。如果您删除此问题,“还是我们应该回答这是不可能的?”贝基回答。但是对于类的问题,答案是无用的。它不会返回新函数()
,而是一个“绑定函数”(例如没有.prototype
)。你本可以变得更简单:-)@Bergi,“你本可以变得更简单:-”)-怎么做?通过废弃新函数
,只返回一个闭包(从函数表达式创建),我的意思是。它不返回新函数()
,而是返回一个“绑定函数”(例如,没有.prototype
)。你本可以变得更容易:-)@Bergi,“你本可以变得更容易:-)”-怎么做?我的意思是,通过废弃新函数
并返回一个闭包(从函数表达式创建),就可以了。