2011-10-16 26 views
2

以下兩種繼承Javascript對象的方法有什麼區別嗎?用Javascript繼承對象的兩種不同(?)方法

function Person(name) { 
    this.name = name; 
} 
function Student(name, id) { 
    Person.call(this, name); 
    this.id = id; 
} 

方法1:

Student.prototype.__proto__ = Person.prototype; 

方法2:

Student.prototype = new Person; 
Student.prototype.constructor = Student; 
+1

我不認爲設置'constructor'屬性是有用的。 – user123444555621

回答

1

除了創建由指定的模式的對象,一個構造函數並另一個有用的事情,它會自動設置新創建對象的原型對象。該原型對象存儲在ConstructorFunction.prototype屬性中。

您可以通過將相當多的「內部」,.__proto__屬性設置爲特定的對象來明確地做到這一點。無論如何,這在所有JavaScript實現中都是不可能的。但基本上,它幾乎是一樣的。 如果未針對對象設置原型,則會採用默認對象(Object.prototype)。