ECMA学习小结(3)——constructor 和 prototype
生活随笔
收集整理的這篇文章主要介紹了
ECMA学习小结(3)——constructor 和 prototype
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
每個函數都有一個prototype的屬性,當我們以這個函數為構造函數創建實例時(即用new的形式),創建出來的這個對象是沒有prototype的屬性的。 以下代碼為例: 在console里進行調試 cf 擁有一個prototype的屬性,這個屬性就叫做原型。這個原型本身是一個對象cf{},我們叫它原型對象。 cf 的原型對象有一個constructor的屬性,它就是構造函數。我們可以看到,這個構造函數是cf本身。(當然它還有一些別的屬性。) cf1 作為 cf 的實例,它擁有了cf.prototype里的所有屬性。把cf1展開看一下: 可以看到cf1 有一個隱式屬性_proto_,這個屬性是無法通過ECMA語句訪問到的。它指向了cf.prototype這個原型對象,這就是原性鏈。 原型對象本身作為ECMA內置對象Object的一個實例,它也有_proto_,指向的是Object.prototype,這就構成了一個鏈表的結構。 這個鏈表就決定了在查找屬性時的順序。例如ECMA在查找 cf1.p1時,會先查找它本身,若沒有p1這個屬性,再沿著_proto_找。 在這里 new 操作符所做的事情,可以分為以下: 1、建立一個新對象cf1 ?var cf1 = cf{ }; 2、將cf1的_proto_指向原型對象 cf1._proto = cf.prototype 3、將cf1作為this的參數,調用構造函數cf。 cf.call(cf1)
轉載于:https://www.cnblogs.com/misadancer/p/3167494.html
總結
以上是生活随笔為你收集整理的ECMA学习小结(3)——constructor 和 prototype的全部內容,希望文章能夠幫你解決所遇到的問題。