先把基本**拿出來:
function
person
(name)
var p1 =
newperson
('張三'
)
很重要的幾個知識點:1.在物件中查詢乙個屬性時,會先從本身查詢,如果查詢不到會到prototype中查詢。 即可以引申,所有物件中都有constructor (這個屬性是在prototype
中的)
2.原型鏈就是圍繞這__proto__、prototype、constructor
展開的
console.
dir(p1)
列印如圖:
可以看到的,p1.__proto__
(這個相當於person.prototype)中還有乙個__proto__
屬性。並且他也告訴我們指向的是object.prototype
我們可以驗證一下:
console.
log(p1.__proto__.__proto__ === object.prototype)
//true
答案是true。證明這倆指向同乙個物件。
再繼續往下鑿試試:既然p1.__proto__.__proto__
存在,那後面再加乙個__proto__
會是什麼樣子呢?
console.
log(p1.__proto__.__proto__.__proto__)
//null
//等價於object.prototype.__proto__ == null
結果是null
。那麼這條線就鑿到頭了。(總不會有人問null.__proto__
為不會有東西吧。。)我們用圖來看看鑿出來的是啥。
以上就是p1.__proto__這條線形成的鏈條,即:
p1.proto->person.prototype先列印peron:person.prototype.proto->object.prototype
object.prototype.proto-> null
console.
dir(person)
如圖:
可以看到,person裡也有乙個__proto__
,那麼這個__proto__
又是指向那個物件的prototype
呢?
這裡就不賣關子了,這個物件就是function。並且這玩意還有點特殊。現在來一步一步分析它。
驗證person.__proto__ == function.prototype
console.
log(person.__proto__ === function.prototype)
//true
答案是true,證明這倆玩意是指向同乙個物件的。
2.看看function長什麼樣子
這裡可以看到,prototype
和__proto__
指向的是同乙個物件(function.prototype),有興趣的朋友自行驗證。那麼這裡就會得到乙個很有趣的東西,function.__proto__ == function.prototype
和funtion.constructors = function
那麼原型鏈的補充為:
看圖,現在就還剩下function.prototype.__proto
、object.__proto__
、object.constructor
沒有完成了
這裡就不驗證了,
function.prototype.__proto__
->object.prototype,
object.__proto__
->function.prototype
object.constructor
->function
接下來就把補全:
JS原型繼承與原型鏈(二)
建構函式的繼承 function animal function cat name,color 一 建構函式繫結 function cat name,color var cat1 new cat 大毛 黃色 alert cat1.species 動物 二 prototype模式 第二種方法更常見,使...
Javascript基礎(三)原型和原型鏈
題目 我是思考分界線 知識點 1 建構函式 2 建構函式 擴充套件 3 原型規則和示例 4 原型鏈 5 instanceof 1 建構函式 function foo name.age var f new foo zhangsan 20 2 建構函式 拓展 var a 其實是var a new obj...
原型 原型鏈與繼承
面試中經常考到物件導向的一些知識,在這記錄一下,如有不對歡迎指正,願在前端的道路上共勉!一 原型 1.什麼是原型 簡單說就像css的class一樣,是公用的,給dom元素加個class名就可以公用樣式,那麼原型就相當於css裡面的class,都可以用。在建構函式建立出來的時候,系統會預設的幫建構函式...