首先需要說明的是通過建構函式來建立物件的方法有很多,es6之後是通過class來建立物件的。那麼今天就用建構函式的方式來建立物件。
我理解的通過建構函式來建立物件,實際上就是把公共的屬性和方法封裝成函式,然後例項化。
下面來建立乙個簡單的建構函式
通過例項化建立star這個物件,這個物件裡面有一些公共的屬性和方法,那麼例項化之後要想使用這些方法,是通過例項化物件來獲取的,而不是通過建構函式來獲取的,但是有一點需要注意的是,靜態成員只能通過建構函式來訪問,例項成員只能通過例項化物件來訪問。function
star
(name, age)
}var ldh =
newstar
('劉德華',18
);// 建立乙個空物件
但是呢會存在乙個問題,如果需要例項化物件很多的話,那就會在記憶體中開闢很多空間,而且有些方法是一樣的,就會造成記憶體浪費。正因為這個問題的存在,這時就引出了prototype原型物件,每乙個建構函式都有這個屬性,作用就是共享方法,可以把一些共有的方法和函式定義到原型上,這樣的話所有物件的例項都能共享這個方法
把sing這個方法定義到原型上就可以實現共享方法,那麼接下來問題又來了,為什麼把sing方法定義到原型上,這些例項化物件就能訪問了?function
star
(uname, age)
star.prototype.
sing
=function()
var ldh =
newstar
('劉德華',18
);var zxy =
newstar
('張學友',19
);console.
log(ldh.name)
; console.
log(zxy.name)
;
其實每個物件都有乙個物件原型__proto__,而這個物件原型指向的是建構函式原型,也就是prototype,其實也就是例項化物件原型就等於建構函式的原型物件。需要注意的是,只有函式function才具有prototype屬性。這個屬性是乙個指標,指向乙個物件,這個物件的用途就是包含所有例項共享的屬性和方法(我們把這個物件叫做原型物件)。原型物件也有乙個屬性,叫做constructor,這個屬性包含了乙個指標,指回原建構函式。
這就說明了可以通過例項化物件來訪問建構函式的原型物件上的方法console.
log(ldh.__proto__ === star.prototype)
;//true
建構函式和原型學習總結
es5 建構函式和原型學習總結 一 例項成員和靜態成員 例項成員是建構函式內部通過this新增的成員,例項成員只能通過例項物件來訪問 靜態成員是通過建構函式新增的成員,只能通過構造函式呼叫 二 建構函式的缺點 建構函式建立例項時,會為每乙個例項物件單獨開闢乙個方法的空間來存放同乙個函式,這樣非常浪費...
建構函式和原型
function student name,age student.prototype var zs new student 張三 18 我們先來看一張圖 在這張圖里student建構函式的prototype指向student原型物件,student原型物件又指向student建構函式,zs物件.p...
建構函式和原型
new的時候做的的4個事情 1.在記憶體中建立乙個新的空物件 2.讓this指向這個新物件 3.執行建構函式裡的 給這個新物件 新增屬性和方法 4.返回這個新物件 靜態成員與例項成員 靜態成員 由構造本身建立的成員 只能由建構函式本身來訪問 例項成員 在建構函式內部建立的物件成員為例項成員 只能由例...