function Star (uname, age) {
this.uname = uname;
this.age = age;
this.sing = function () {
console.log('I like sing songs')
}
}
實例成員
實例成員就是構(gòu)造函數(shù)內(nèi)部通過 this添加的成員首启,uname, age ,sing
就是實例成員
實例成員只能通過實例化對象來訪問
var ldh = new Star('劉德華', 18);
console.log(ldh.uname);
靜態(tài)成員
靜態(tài)成員 指的是在構(gòu)造函數(shù)本身上添加的成員
靜態(tài)成員只能通過構(gòu)造函數(shù)訪問
Star.sex = 'man'
console.log(Star.sex) // man
console.log(ldh.sex) // undefined
構(gòu)造函數(shù)很好用尘分,但是容易造成內(nèi)存浪費的問題
var ldh = new Star();
var zxy = new Star();
console.log(ldh.sing === zxy.sing ) ; // false
Star
實例對象所分配的內(nèi)存地址不一樣
我們希望所有的實例對象使用同一個函數(shù)這樣比較節(jié)省內(nèi)存地址咕村,需要怎么做呢荠藤?
原型對象
Star.prototype.dance = function () {
console.log('dance')
}
console.log(ldh.dance === zxy.dance); // true
構(gòu)造函數(shù)通過原型對象分配的函數(shù)時所有對象共享的亿汞。 javascript 規(guī)定徘跪,每個構(gòu)造函數(shù)都有一個 prototype屬性讳推,指向另一個對象
注意: prototype
就是一個對象艾船,這個對象的所有屬性和方法都會被構(gòu)造函數(shù)所擁有
我們可以把那些不變的方法葵腹,直接定義在 prototype 對象上,這樣所有對象的實例就可以共享這些方法
原型是什么: 一個對象 屿岂,prototype
原型對象践宴,
作用: 共享方法