關於js 原生原生鏈


可以這么理解
(1).所有的引用類型都有一個 _proto_ (隱式原型)屬性,屬性值是一個普通的對象
(2).所有的函數都有一個prototype(顯示原型)屬性,屬性值是一個普通的對象
(3).所有引用類型都有一個constructor(構造函數)屬性,該屬性(是一個指針)指向它的構造函數
(4).所有引用類型的 _proto_ 屬性指向它構造函數的prototype


總的來說
當一個對象調用自身不存在的屬性或者方法的時候,會先去它的_proto_上查找,
也就是它的構造函數的prototype,
如果沒有找到,
就會去它構造函數的prototype的_proto_指向的上一級函數的prototype去找(這里就是Object.prototype),
如果還找不到 ,
最后為null,這種一層一層向上查找的關系形成了一種鏈式結構,就叫原型鏈


其實就是對象的_proto_(隱式原型) == 構造函數(父級)的 prototype
而構造函數的prototype也有自己的_proto_

 

 

 

 

 js代碼

// 父類
class People {
    constructor(name) {
        this.name = name
    }
    eat() {
        console.log(`${this.name} eat something`)
    }
}

// 子類
class Student extends People {
    constructor(name, number) {
        super(name)
        this.number = number
    }
    sayHi() {
        console.log(`姓名 ${this.name} 學號 ${this.number}`)
    }
}

// 子類
class Teacher extends People {
    constructor(name, major) {
        super(name)
        this.major = major
    }
    teach() {
        console.log(`${this.name} 教授 ${this.major}`)
    }
}

// 實例
const xialuo = new Student('夏洛', 100)
console.log(xialuo.name)
console.log(xialuo.number)
xialuo.sayHi()
xialuo.eat()

// 實例
const wanglaoshi = new Teacher('王老師', '語文')
console.log(wanglaoshi.name)
console.log(wanglaoshi.major)
wanglaoshi.teach()
wanglaoshi.eat()

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM