js繼承的原理

2021-07-25 17:20:03 字數 1342 閱讀 2918

js中的物件和函式最頂級的兩個類為object和function,任何由我們定義的函式或物件都是這兩個類的子類

也就是說js中的一切都是物件.

一.函式物件和一般物件

物件分為函式物件和一般物件,

函式物件,比如function f(),var f = function(){},var f = new function("arg","statement"),他們都擁有以下兩個特殊的屬性__proto__和prototype

一般物件,比如var o = new ***(),var o = {},var o = new object(),他們沒有prototype,但是有__proto__屬性.

二.js中繼承的基本原理

js中有一種東西叫做原型鏈,js引擎會沿著原型鏈搜尋直到object,object.prototype.__proto__指向null,到這原型鏈就結束了.如果在這過程中發現屬性和方法,那麼物件就將擁有這些屬性和方法.

圖示:

解釋:為什麼即使你沒有給你的類新增tostring()方法卻也能夠呼叫

當我們建立了myobj類的乙個例項o,js引擎會從原型鏈開始搜尋o應該具有的方法

首先從o本身開始搜尋,沒有,那麼從o.__proto__所指向的物件也就是myobj.prototype(所以如果console.info(o.__proto__===myobj.prototype)會打出true)搜尋,也咩有

而myobj.prototype本身也是乙個一般物件,所以也有__proto__屬性,所以繼續沿著__proto__所指的物件進行搜尋,而myobj.prototype.__proto__則指向了object.prototype

物件,如果你用(console.info(object.prototype)),你就發現在這個物件下面有個屬性叫tostring,是乙個方法屬性.這也就是為什麼你建立的類,即便沒有新增tostring方法卻依然

能夠呼叫這個方法.(如果console.info(o.tostring)會打出function()和object.tostring相同).

二.兩個特殊的類function和object

object.prototype.__proto__ ==>null

object.__proto__ ==>functon.prototype

function.protype.__proto__ ==>object.prototype

function.__proto__==>function.prototype

由上可以看出最後原型鏈都指向了null物件,也就是正常的結束,不會死迴圈

js繼承原理

首先要理解 建構函式 存在乙個prototype 指向他的原型物件 原型物件其實就是一塊空間,可以是物件的實列 實列 存在乙個 prototype 指向他的建構函式的原型物件一般 proto 表示 new 來建立的實列是開闢乙個新的空間所以是無法共享元素的但是new 的建構函式的 prototype...

JS繼承原理剖析

1 原型鏈繼承 建構函式 原型和例項之間的關係 每個建構函式都有乙個原型物件,原型物件都包含乙個指向建構函式的指標,而例項都包含乙個原型物件的指標。繼承的本質就是複製,即重寫原型物件,代之以乙個新型別的例項。function supertype supertype.prototype.getsupe...

js繼承的原理 方式以及優缺點

之前看js繼承問題,自己查閱資料,看到有一篇文章整理還可以,便在文章的基礎上又細化了一些。js作為物件導向的弱型別語言,繼承也是其非常強大的特性之一。那麼如何在js中實現繼承呢?讓我們拭目以待。js繼承的實現方法 原型鏈繼承 構造繼承 例項繼承 拷貝繼承 組合繼承 寄生組合繼承。既然要實現繼承,那麼...