函数调用JS` this`

时间:2013-12-26 19:52:28

标签: javascript

通过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'

2 个答案:

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