怪我閱讀理解考零分,這書看着打腦袋。javascript
原型對象:java
function laptop(color, brand, price){app
this.color = color;函數
this.brand = brand;this
this.price = price;prototype
}對象
console.log(laptop.prototype);blog
輸出結果是一個原型對象,內部有一個constructor指向原函數。繼承
console.log(laptop === laptop.prototype.constructor) //true遊戲
console.log(laptop === laptop.prototype); // false
哭,這書上解釋的跟繞口令同樣 :
「當咱們建立函數時,javascript會自動建立一個原型對象,被建立函數會默認有一個ptototype屬性指向原型對象,原型對象也有一個constructor屬性指向原函數。
所以對於對象的構造函數存在一個原型對象可經過prototype訪問。」
難道是說: 1.prototype屬性,從建立函數指向它的原型對象。laptop 與 laptop.prototype,他們不是同一個東西。
2.constructor屬性,從原型對象指向原函數。laptop 和 laptop.prototype.constructor是同一個東西。
3.改變原型對象的屬性後,原函數並不會改變,可是用該函數實例化的對象能夠改變。
function laptop(color, brand, price){
this.color = color;
this.brand = brand;
this.price = price;
this.program = function(){
console.log("用來玩遊戲");
}
}
var laptop1 = new laptop ("white", "apple", "10000");
laptop.prototype.size = 15;
laptop.prototype.game = function(){
console.log("用來畫畫");
} //只在原型對象上添加了新屬性,原函數不會改變
console.log(laptop.prototype)
console.log(laptop);
console.log(laptop.size)
console.log(laptop1.size);
書上寫「在獲取原型對象後能夠經過修改原型對象的方法和屬性來改變全部以該原型對象爲原型的對象的方法和屬性。」
哭。
或許可能大概它的意思是:實例化後若是發現原函數沒有這個屬性,再到原型對象上找。
實現了:改變原型對象的屬性後,原函數並不會改變,可是用該函數實例化的對象能夠改變。
原型對象的繼承:
「爲構造函數指定一個原型對象,用這個構造函數建立的對象就有原型對象的全部屬性和方法,這就是繼承」
爲構造函數指定一個原型對象? (爲原型對象指定一個構造函數 )??
一樣,實例化後原函數上沒有的,再去原型對象上找。
ul1 = new ul();
console.log(ul1.color); // white console.log(ul1.brand); //acer console.log(ul1.size); //15