gpt4 book ai didi

javascript - 评估后保留上下文

转载 作者:行者123 更新时间:2023-11-30 18:13:20 24 4
gpt4 key购买 nike

http://jsfiddle.net/Neb9E/

// Unknown parent
var Func=function(){}
Func.prototype.foo=function(){
console.log(this,arguments);
}
window.func=new Func();


// External call, we do not know parent of evaled function
var foo=eval('func.foo');
foo();
window.func.foo();​

在使用 eval 时是否可以得到与调用 window.func.foo(); 相同的结果?

最佳答案

这与eval无关。当你说

foo();

this inside foo 将始终是全局对象(除非该函数是使用 bind 创建的——见下文)。您有几个选择:

您可以使用 bind

“预设”this 值
//won't work on IE8 - will have to shim `bind`
var foo = eval('func.foo.bind(func)');

UPDATED FIDDLE

或者您可以在使用 call

调用函数时手动设置 this
var foo = eval('func.foo');
foo.call(func);

UPDATED FIDDLE


是的,正如 nbrooks 所说,不鼓励使用 eval。

关于javascript - 评估后保留上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14023347/

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