2012-08-09 65 views
1

這個代碼看看:混亂行爲的JavaScript

function Foo() { 
    console.log(this instanceof Foo); 
    return { name: "nitesh" }; 
} 

foo = new Foo(); //true 
console.log(foo instanceof Foo) //false 
  1. 爲什麼foo不是Foo一個實例?
  2. 爲什麼thisFoo的一個實例?
+2

你基本上是做'{名: 「nitesh」}的instanceof Foo'。 – 2012-08-09 14:20:15

回答

11

在您的Foo函數中,您返回一個對象。這是foo的設置。這不是一個Foo對象,它只是一個「正常」的對象。

試試這樣說:

function Foo(){ 
    console.log(this instanceof Foo); 
    this.name = "nitesh"; 
} 

var foo = new Foo(); //true 
console.log(foo instanceof Foo) //true 
+0

感謝您的解釋,但我仍然感到困惑這是Foo的一個實例嗎? – 2012-08-09 14:21:44

+0

@niteshsharma:這就是'新'的作品。從[docs](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/new):'構造函數被調用指定的參數,'this'綁定到新創建的object.' – 2012-08-09 14:23:26