原型繼承的本質就是一條原型鏈,物件會沿著這條鏈,訪問鏈裡的方法屬性.
物件的__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();首先尋找person的私有方法:function
person();
this.init=function();
}person.prototype.init=function()
var person = new
person();
person.init=function()
var object = new
object();
person.init();
--也就是這裡的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 //math物件和json物件,不是建構函式,他們的__prototype__是object.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.__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 給原型物件新增屬性 一般都是方法 作用 函式的所有例項...