JS(十三)原型、原型鏈、call、apply(上)

寫在最前面

原型

  • 定義 : 原型是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(){}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章