理解JavaScript原型鏈

2021-08-18 06:54:44 字數 3189 閱讀 7505

主要是利用了__proto__這個隱式原型將所有的繼承串在了一起,實現了原型鏈

下面是乙個new itemtest()的例項,它的__proto__就指向了繼承的itemtest的prototype,然後再向上__proto__就是test的prototype,由此構成了原型鏈

ecmascript將原型鏈作為實現繼承的主要方法,其基本思想就是利用原型讓乙個引用繼承另乙個引用型別的屬性和方法

原因:乙個是定義在例項物件上的,乙個是在原型鏈上的,不衝突,但是不建議這麼做

// 給原型新增方法一定要放在替換方法前面

itemtest.prototype.sayage = function();

itemtest.prototype.sayname = function();

var item = new itemtest("zjf");

console.log(item.sayname()); //"zjf"

console.log(item),可以看出例項本身沒有sayname()方法,那麼它就會沿著原型鏈一層層往上找 

但是 itemtest.prototype.constructor指向了test,可以通過以下**改變其指向

itemtest.prototype.constructor = itemtest;

或object.defineproperty(itemtest.prototype, "constructor", );

console.log(itemtest.prototype.constructor); //指向itemtest

原型鏈有乙個問題:沒有繼承型別屬性,可通過借用建構函式來解決這個問題,與原型鏈結合,呼叫上級的建構函式

function super(name) 

function sub(name, age)

console.log(item instanceof itemtest);            //true

console.log(item instanceof test); //true

console.log(item instanceof object); //true

使用object.create()建立乙個新物件,新物件的原型就是該方法的第乙個引數

let a= ;

let b = object.create(a);

console.log(object.getprototypeof(b)); //

object.getprototypeof()方法傳入乙個物件作為引數,查詢該引數的原型,或者原型鏈上的屬性或方法

let a= ;

let b = object.create(a);

console.log(object.getprototypeof(b)); //

console.log(object.getprototypeof(b).name); //"zjf"

object.setprototypeof()方法設定兩個物件作為引數,第二個引數被設定為第乙個引數的原型,但是效能上並不是很好,所以不建議採取

let a= ;

let b = {};

object.setprototypeof(b,a);

console.log(object.getprototypeof(b)); //

javascript原型鏈理解

1.在oo語言中,繼承的方式支援兩種 介面繼承與實現繼承。介面繼承 繼承方法簽名,實現繼承 繼承實際方法。但是 在ecmascript中沒有方法簽名,無法實現介面繼承,只支援實現繼承,而實現繼承主要是依靠原型鏈來實現。2.原型鏈基本思路 利用原型讓乙個引用型別繼承另乙個引用型別的屬性和方法。每個建構...

深入理解JavaScript的原型 原型鏈與繼承

在介紹原型是什麼之前,首先需要知道原型是做什麼用的,在js高設書中,明顯可以看到介紹有關原型的知識是在介紹建立物件的方式時提出來的,即使用原型模式來建立物件,顯而易見,原型這個概念是與建立物件聯絡在一起的。當然,建立物件的方式有很多種,如工廠模式,建構函式模式,以及與原型模式有關的其他模式等。我們建...

JavaScript原型以及原型鏈

原型物件的用途是為每個例項物件儲存共享的方法和屬性,它僅僅是乙個普通物件而已。並且所有的例項是共享同乙個原型物件,因此有別於例項方法或屬性,原型物件僅有乙份。在訪問乙個物件的屬性的時候,首先在當前物件中找,如果沒有在其原型物件找 復用的內容放在prototype,讓類的例項擁有相同的功能 小紅書上的...