2011-09-22 63 views

回答

4

那麼,你應該使用,因爲代碼重用和繼承原型。
基本上,如果您將方法綁定到this關鍵字,那麼您只是將該方法提供給該特定實例,而在原型中,則爲該類的所有實例編寫該方法。
例如:

function Person(name) { 
    this.name = name; 
    this.toString = function() { 
     return this.name; 
    } 
} 
var bob = new Person('Bob'); 
var jim = new Person('Jim'); 
jim.toString = function() { 
    return "I have amnesia, I forgot my name!"; 
}; 

現在,雖然bobjim都是人(同一類的實例),他們的行爲不同,因爲他們有自己的一套規則(方法),他們依靠。
如果你使用的原型:

function Person(name) { 
    this.setName(name); 
} 
Person.prototype = { 
    name : 'default name', 
    setName : function(name) { 
     this.name = name; 
    }, 
    toString : function() { 
     return this.name; 
    } 
}; 
var bob = new Person('Bob'); 
var jim = new Person('Jim'); 
Person.prototype.toString = function() { 
    return "I have amnesia, I forgot my name!"; 
}; 

現在,所有的人的行爲相同。
使用原型繼承有利於代碼重用,並且不會將不必要的重複內容加載到內存中。 +更新這種方式更簡單。

2

一個原因是因爲它會將該函數更新/添加到已經創建的那種類型的對象中。

function Person(name) { 
    this.name = name; 
} 

var person = new Person("Test"); 
alert(person.toString()); // alerts [object Object] 

Person.prototype.toString = function() { 
    return this.name; 
}; 
alert(person.toString()); // alerts Test 

http://jsfiddle.net/28puy/

1

在JavaScript中,方法是對象。在你的第二個Person構造函數中,你正在爲Person的每個實例創建一個toString函數的新實例。通過使用原型對象,只有一個toString函數實例將在Person的所有實例中共享。

相關問題