我是js初学者,对下面的代码感到困惑:
Foo = function(arg) {
this.arg = arg;
};
Foo.prototype = {
init: function () {
var f = function () {
alert("current arg: " + this.arg); // am expecting "bar", got undefined
}
f();
}
};
var yo = Foo("bar");
yo.init();
我预计会得到“当前参数:栏”,但得到“当前参数:未定义”。我注意到,首先将 this.arg 复制到“正常”变量中,然后在闭包中引用此变量:
Foo.prototype = {
init: function () {
var yo = this.arg;
var f = function () {
alert("current arg: " + yo); }
f();
}
};
我是否做错了什么,得到了错误的期望,或者它是否属于 js WTF 之一?
普通函数将运行this
指的是window
。您的第二段代码是如何使用闭包解决此问题的完美示例。
(您也可以使用call
and apply
调用具有特定上下文的函数。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)