// 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();
相同的结果?
答案 0 :(得分:2)
这与eval无关。当你说
foo();
foo中的 this
将始终作为全局对象(除非该函数是使用bind
创建的 - 见下文)。你有几个选择:
您可以使用bind
//won't work on IE8 - will have to shim `bind`
var foo = eval('func.foo.bind(func)');
或者您可以在使用this
call
值
var foo = eval('func.foo');
foo.call(func);
是的,正如nbrooks所说,应该不鼓励使用eval。