原型與原型鏈

2022-05-16 19:27:21 字數 742 閱讀 8214

如果在建構函式中直接為物件新增屬性和方法,則會導致每個物件都包含乙份自己的屬性和方法,當大量建立物件時就會浪費很多儲存空間。而將屬性和方法新增到建構函式的原型中就可以使通過該建構函式建立出來物件共用這些屬性和方法。即原型實現了屬性和方法的共享

為建構函式指定原型:

objfunc.prototype = object.create(basefunc)

objfunc.prototype.constructor = basefunc

es6中支援 class 和 extends 關鍵字,就不需要用上面的方式了(但本質上還是一樣的)。

當訪問物件的屬性和方法時,js執行時會首先在該物件自身中查詢要使用的屬性和方法,找到就呼叫;如果找不到,則會到原型中查詢。因此原型中的屬性和方法雖然是共享的,但它們的優先順序要低一點。

js執行時在查詢可呼叫的屬性和方法時並不只查詢一層原型,因為原型本身也是物件,因此js執行時還會查詢原型物件的原型,一直查詢到object的原型為止。這樣就構成了乙個鏈式結構,稱為原型鏈。通過原型鏈可以形成類似繼承的效果。

但js中的繼承與其它程式語言中的繼承還是有區別的!在其它程式語言中,任何類的物件都是由乙個例項構成的,屬性值也只有乙個值,不管繼承多少層。而js通過原型鏈形成的繼承是由多個例項構成的鏈,屬性值也可以有多個值(每一層原型上都可以有乙個不同的值),繼承的層次越多,涉及的例項就越多,值也越多!

js的原型鏈在angular中還被用於構造作用域鏈。

原型與原型鏈

原型有兩種 1為顯示原型,2為隱式原型 1.顯示原型 a prototype b 每個函式都有乙個顯示原型prototype當然函式也有隱式原型 c 原型就是函式的乙個屬性,這個屬性名叫做prototype d 這個屬性即prototype的型別是object 2.隱式原型 a proto b 每個...

原型與原型鏈

圖中一共標了7條線,就一條一條的講,講完了就應該懂了 已知 1.函式是物件,原型也是物件 2.proto 每乙個物件都有,prototype是函式特有的 3.物件的 proto 屬性指向該物件建構函式的 原型 prototype 線1.物件f1的 proto 屬性指向其建構函式的原型 其建構函式 f...

原型與原型鏈

值型別 string,number,boolean,undefined function person var p1 newperson p1即為建構函式person 的例項化物件 var arr 10 20,30 40,50 60 這種語法糖形式的物件建立,是由array 函式建立簡化而來的。這個...