寫在最前面
原型
- 定義 : 原型是function對象的已個屬性,它定義了構造函數造出的對象和公共祖先。通過該構造函數產生的對象,可以繼承該原型的屬性和方法。原型也是對象
- 利用原型特點和感念,可以提取公有屬性
- 對象如何查看原型–>隱式屬性proto
- 對象如何查看對象的構造函數–>constructor
// Person.prototype --原型
//這個是系統自帶的一個屬性叫 --> prototype翻譯過來就是原型
//Person.prototype在這個函數剛剛出生的時候就被定義好了
//首先Person.prototype是一個對象
//Person.prototype = {};//是祖先
//可以理解爲他就是一個空對象,它就相當於Person這個構造函數,構造出對象的父級
Person.prototype.name = "wu";//我這裏在Person.prototype上定義一個name
function Person(){
}
var person = new Person();
//這裏訪問person.name -->打印出"wu"
prototype也可以用爲共有屬性
Person.prototype.name = "wu";
function Person(){
}
var person = new Person();
var person1 = new Person();
person.name; //打印出"wu"
person1.name; //也打印出"wu"
//都是通過Person這個構造函數的原型繼承的
原型的特點
Person.prototype.name = "wu";
Person.prototype.say = function(){
console.log("hehe");
}
function Person(){
this.name = "shen";
}
var person = new Person();
person.name;//打印出"shen" 因爲自己的函數裏面有這個屬性所以優先訪問自己的
原型的應用
function Car(color,owner){
this.owner = owner;
this.carName = "BMW";
this.height = 1400;
this.lang = 4900;
this.color = color;
}
var car = new Car("red","prof.wu")
以上這些代碼就完全可以把寫死的屬性用原型給提取出來
Car.prototype.carName = "BMW";
Car.prototype.height = 1400;
Car.prototype.lang = 4900;
function Car(color,owner){
this.owner = owner;
this.color = color;
}
var car = new Car("red","prof.wu");
var car1 = new Car("red","prof.shen");
原型的增刪改查
Car.prototype.carName = "BMW";
Car.prototype.height = 1400;
Car.prototype.lang = 4900;
//也可以用這種寫法
Car.prototype = {
carName = "BMW";
height = 1400;
lang = 4900;
}
function Car(color,owner){
this.owner = owner;
this.color = color;
}
var car = new Car("red","prof.wu");
//查
car.lang //打印出4900
//改
car.lang = "James";//修改不了,因爲這樣總是你在給car這個函數裏面添加屬性
除非
car.prototype.lang = "James";
//增
car.prototype.heavy = "1400KG";
//刪除
delete car.prototype.lang
cnostructor
- constructor指向的是對應的構造函數
function Car(){
}
var car = new Car();
car.constructor//指向的是整個構造函數
//返回出 function Car(){}
修改constructor的指向
function Person(){
}
Car.prototype = {
//原本constructor是指向Car的
//現在我把他修改爲
constructor : Person
}
function Car(){
}
var car = new Car();
car.constructor//指向的函數就是Person了
//返回的就是 function Person(){}