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

寫在最前面

原型

  • 定義 : 原型是function對象的已個屬性,它定義了構(gòu)造函數(shù)造出的對象和公共祖先。通過該構(gòu)造函數(shù)產(chǎn)生的對象,可以繼承該原型的屬性和方法。原型也是對象
  • 利用原型特點和感念,可以提取公有屬性
  • 對象如何查看原型-->隱式屬性proto
  • 對象如何查看對象的構(gòu)造函數(shù)-->constructor
// Person.prototype --原型 
//這個是系統(tǒng)自帶的一個屬性叫  --> prototype翻譯過來就是原型
//Person.prototype在這個函數(shù)剛剛出生的時候就被定義好了
//首先Person.prototype是一個對象
//Person.prototype = {};//是祖先
//可以理解為他就是一個空對象,它就相當(dāng)于Person這個構(gòu)造函數(shù),構(gòu)造出對象的父級

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這個構(gòu)造函數(shù)的原型繼承的

原型的特點

Person.prototype.name = "wu";
Person.prototype.say = function(){
    console.log("hehe");
}
function Person(){
    this.name = "shen";
}

var person = new Person();

person.name;//打印出"shen"  因為自己的函數(shù)里面有這個屬性所以優(yōu)先訪問自己的

原型的應(yīng)用


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這個函數(shù)里面添加屬性
除非
car.prototype.lang = "James";
//增
car.prototype.heavy = "1400KG";
//刪除
delete car.prototype.lang

cnostructor

  • constructor指向的是對應(yīng)的構(gòu)造函數(shù)
function Car(){
    
}
var car = new Car();

car.constructor//指向的是整個構(gòu)造函數(shù)
//返回出 function Car(){}

修改constructor的指向

function Person(){
    
}

Car.prototype = {
    //原本constructor是指向Car的
    //現(xiàn)在我把他修改為
    constructor : Person
}


function Car(){
    
}
var car = new Car();

car.constructor//指向的函數(shù)就是Person了
//返回的就是 function Person(){}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容