通过Secrets of the JavaScript Ninja,我正在研究有关this
关键字的构造函数。
function Ninja() {
this.skulk = function() { return this; }
}
例:
var ninja1 = new Ninja();
window.onload = function() {
assert(ninja1.skulk() === ninja1,
"the 1st ninja is skulking");
};
输出:第一个忍者在偷偷摸摸
但是,如果添加
var windowNinja = Ninja()
,为什么我会在Chrome中看到此JavaScript错误? assert(windowNinja.skulk() === window,
"the window ninja is skulking");
输出:JavaScript错误:未捕获的TypeError:无法调用未定义的方法“ skulk”
最佳答案
Ninja
不返回任何内容,因此,如果不使用new初始化它的实例,则它将返回undefined并且存储在windowNinja
中。你可以打电话
Ninja();
assert(window.skulk() === window,
"the window ninja is skulking");
因此,
this
中的Ninja
是全局对象(窗口),因此您要为其分配方法skulk
。它返回调用它的对象。您也可以在函数中添加返回值
function Ninja() {
this.skulk = function() { return this; }
return this;
}
关于javascript - JS`this`关于函数调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20790476/