2014-08-28 61 views
1

幾天前,我看到一個例子比較對象的實例和他們的方法返回true或false,我試圖通過我自己做到這一點。我,如果我聲明中對象的方法,而不是在他的原型,它必須在這個例子返回假的,但我得到真正:在這種情況下,java腳本中對象方法的比較返回false

function Foo(name, lastName) { 
    this.name = name, 
    this.lastName = lastName, 
    this.show = function() { 
     return this.name; 
    } 
} 

function Foo2(name, lastName) { 
    Foo.apply(this, arguments); 
} 

Foo2.prototype = Foo.prototype; 
Foo2.prototype.constructor = Foo2; 

var x = new Foo2("Peter", "Pan"); 
var y = new Foo2("John", "English"); 

console.log(x.show() === y.show());// true, why not false? it is two differed functions 

當我對它們進行比較,結果是真實的,但我可以」不明白爲什麼? 如果我在對象內部聲明屬性並執行新對象,我創建了兩個不同的函數,並且當我在原型中聲明時,它創建了一個相等的函數。

感謝您的任何建議。

+0

你沒有比較功能,你正在比較功能返回。 – Barmar 2014-08-28 21:05:17

+0

和我可以比較它們的功能? – Victorino 2014-08-28 21:06:10

+1

函數調用函數後放置'()'。使用不帶'()'的名稱:'console.log(x.show === y.show))'。 – Barmar 2014-08-28 21:07:20

回答

1

您正在調用函數並比較它們的返回值,而不是函數本身。爲了引用這些功能本身,請使用後面沒有()的名稱。

var x = new Foo2("Peter", "Pan"); 
var y = new Foo2("Peter", "English"); 

console.log(x.show() === y.show()); // true 
console.log(x.show === y.show); // false 
+0

感謝您的幫助。 – Victorino 2014-08-28 21:15:34

+0

@HMR在我的例子中沒有約翰。我改變了這個問題的例子,因爲當他聲稱它返回'true'時它返回'false'。 'show'函數是不一樣的,因爲它不在原型中,它是在構造函數中新創建的閉包。 – Barmar 2014-08-28 23:23:41

相關問題