通过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'
答案 0 :(得分:2)
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;
}
答案 1 :(得分:0)
你遗漏了新的var windowNinja = new Ninja();