在eval之后保持上下文

时间:2012-12-24 15:53:15

标签: javascript

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();​相同的结果?

1 个答案:

答案 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)'); 

UPDATED FIDDLE

或者您可以在使用this

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

UPDATED FIDDLE


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