javascript高階 原型與繼承

2021-09-06 13:06:40 字數 2463 閱讀 3390

原型繼承的本質就是一條原型鏈,物件會沿著這條鏈,訪問鏈裡的方法屬性.

物件的__proto__屬性就是用於訪問它的原型鏈的上一層:

考慮以下物件:

1. 所有物件的原型:

object.prototype

2. 所有函式的原型:

function.ptototype

3. 函式的建構函式:

function

4. 物件的建構函式:

object

5. 自定義的建構函式person:

function person();

this.init=function();

6. 自定義建構函式person的原型person.prototype:

person.prototype.init=function()

7. 通過person例項化得到的物件person:

var person = new person();

person.init=function()

8. 通過object例項化得到的物件object:

var object = new object();

* 注意: var object = {},一樣也是通過object例項化得到的物件

他們之間的繼承關係如下:

從最外層的開始看起,如果要訪問person例項的某個方法屬性,它尋找的順序應該是這樣的:

完整**:

object.prototype.init=function();

function

person();

this.init=function();

}person.prototype.init=function()

var person = new

person();

person.init=function()

var object = new

object();

person.init();

首先尋找person的私有方法:

--也就是這裡的person.init;

如果找不到,會找到person的物件的方法:

--也就是這裡的person建構函式裡的的this.init;

如果再找不到,它就會到原型鏈裡去找方法:

person的原型鏈,就是person.__proto__,這裡就是指向person.prototype

因為,順著原型鏈,首先會找到person原型的方法:

--也就是這裡的person.prototype.init;

如果再找不到,它會順著原型鏈繼續找,也就是person.prototype.__proto__,就是指向object.prototype

--也就是這裡的object.prototype.init;

如果再找不到,那麼就沒有了,因為object.prototype.__proto__指向null

所以,在js裡,一切皆物件,因為所有的物件通過原型鏈,最後都會繼承object.prototype裡的方法和屬性,比如tostring...等等...

再來看person建構函式,function建構函式,object建構函式:

同樣,示例中雖然沒有提到,但是相似的,所有的內建建構函式,他們的__proto__也都是function.prototype:

boolean.__proto__ === function.prototype //

true

string.__proto__ === function.prototype //

true

object.__proto__ === function.prototype //

true

function.__proto__ === function.prototype //

true

array.__proto__ === function.prototype //

true

regexp.__proto__ === function.prototype //

true

error.__proto__ === function.prototype //

true

date.__proto__ === function.prototype //

true

math物件和json物件,不是建構函式,他們的__prototype__是object.prototype:

math.__proto__ === object.prototype  //

true

json.__proto__ === object.prototype //

true

JavaScript高階 原型

1.什麼是原型 原型是 js 中非常特殊乙個物件,當乙個函式建立之後,會隨之就產生乙個原型物件,當通過這個函式的建構函式建立了乙個具體的物件之後,在這個具體的物件中就會有乙個屬性指向原型。第一種狀態 定義了乙個物件 function person 第二種狀態,這樣賦值就會賦在原型物件中 使用原型來給...

javascript考點高階 原型

一 jquery和zepto的簡單使用 jqury test 1 jqury test 2 jqury test 3 jquery test in div 二 zepto如何使用原型 function window function z dom,selector this.length len th...

JavaScript原型與原型鏈

程式設計師兼職神器 vip影視 一鍵建站,賣vip會員賺房租 hadoopdoc.com 1 每個函式都有乙個prototype屬性,它預設指向乙個object空物件 即稱為 原型物件 原型物件中有乙個constructor,它指向函式物件 2 給原型物件新增屬性 一般都是方法 作用 函式的所有例項...