原型和原型鏈

2022-08-02 02:36:11 字數 3123 閱讀 2137

js 是乙個基於原型繼承的語言

class student 

say () , 我今年 $ 歲, 我的學號是 $`)

}}let liming = new student('李明', 18, '0001') //

通過類 new 物件/例項

console.log(liming.name) //

李明console.log(liming.age) //

18liming.say() //

我是 李明, 我今年 18 歲, 我的學號是 0001

//

父類class people

eat () 會吃飯`)

}}//

子類 學生

class student extends people

say () , 我今年 $ 歲, 我的學號是 $`)

}}//

子類 老師

class teacher extends people

teach () , 我今年 $ 歲, 我教授 $`)

}}//

例項const liming = new student('李明', 18, '001')

console.log(liming.name)

//李明

liming.eat() //

李明 會吃飯

liming.say() //

我是 李明, 我今年 18 歲, 我的學號是 001

//例項

const wanglaoshi = new teacher('王老師', 30, '語文')

console.log(wanglaoshi.name)

//王老師

wanglaoshi.eat() //

王老師 會吃飯

wanglaoshi.teach() //

我是 王老師, 我今年 30 歲, 我教授 語文

instanceof 判斷這個變數屬於哪個 class 用於識別正在處理的物件的型別。與 typeof 方法不同的是,instanceof 方法要求開發者明確地確認物件為某特定型別。

console.log( instanceof array) //

true

console.log( instanceof object) //

true

console.log({} instanceof object) //

true

console.log(liming

instanceof student) //

true

console.log(liming instanceof people) //

true

console.log(liming instanceof object) //

true

隱式原型和顯式原型

//

class 實際是函式, 是es6的語法糖

console.log(typeof people) //

function

console.log(typeof student) //

function

//隱式原型(__proto__)型和顯式原型(prototype)

console.log(liming.__proto__) //

例項物件的 隱式原型

console.log(student.prototype) //

被例項類的

console.log(liming.__proto__ === student.prototype)

**關係

原型關係

基於原型的執行規則

原型鏈**

//hasownproperty() 方法返回乙個布林值,判斷物件是否包含特定的自身(非繼承)屬性。

//這裡來驗證一下是不是通過原型鏈繼承的屬性

console.log(liming.hasownproperty('name')) //

true

console.log(liming.hasownproperty('eat')) //

false

那麼 hasownpropert() 方法很顯然來自 object

可以結合原型鏈的思維去理解 instanceof

a instanceof array 準確判斷乙個變數是不是陣列

class jquery 

this.length =length

}get (index)

each (fn)

}on (type, fn) )

}//擴充套件很多 api dom 操作}//

擴充套件性 - 外掛程式機制

jquery.prototype.dialog = function

(info)

//擴充套件性 - 複寫機制(造輪子)

class myjquery extends jquery

//擴充套件自己的方法

dialog2 (info)

}

原型 和 原型鏈

每乙個js物件 null除外 都和另乙個物件相關聯。另乙個 物件就是我們熟知的原型,每乙個物件都從原型繼承屬性。所有通過物件直接量建立的物件都具有同乙個原型物件,並可以通過js object.prototype 獲得對原型物件的引用。通過關鍵字new和構造函式呼叫建立的物件的原型就是建構函式的 pr...

原型和原型鏈

原型鏈 例項物件與原型之間的連線,叫做原型鏈 function human human.prototype.age 22 var a new human console.log a.age 這裡的age掛載到了human的原型上面了。其實原型就是乙個物件。a為什麼能找到原型上面的物件呢?這裡例項物件...

原型和原型鏈

建構函式 function foo name age function 其實是 var a new object 的語法糖 var a 其實是 var a new array 的語法糖 function foo 其實是 var foo new function 的語法糖 new乙個物件的過程 建立乙...