function Star (uname, age) {
this.uname = uname;
this.age = age;
this.sing = function () {
console.log('I like sing songs')
}
}
實例成員
實例成員就是構造函數內部通過 this添加的成員,uname, age ,sing
就是實例成員
實例成員只能通過實例化對象來訪問
var ldh = new Star('劉德華', 18);
console.log(ldh.uname);
靜態成員
靜態成員 指的是在構造函數本身上添加的成員
靜態成員只能通過構造函數訪問
Star.sex = 'man'
console.log(Star.sex) // man
console.log(ldh.sex) // undefined
構造函數很好用,但是容易造成內存浪費的問題
1.png
var ldh = new Star();
var zxy = new Star();
console.log(ldh.sing === zxy.sing ) ; // false
Star
實例對象所分配的內存地址不一樣
我們希望所有的實例對象使用同一個函數這樣比較節省內存地址,需要怎么做呢?
原型對象
Star.prototype.dance = function () {
console.log('dance')
}
console.log(ldh.dance === zxy.dance); // true
構造函數通過原型對象分配的函數時所有對象共享的。 javascript 規定,每個構造函數都有一個 prototype屬性,指向另一個對象
注意: prototype
就是一個對象,這個對象的所有屬性和方法都會被構造函數所擁有
我們可以把那些不變的方法,直接定義在 prototype 對象上,這樣所有對象的實例就可以共享這些方法
原型是什么: 一個對象 ,prototype
原型對象,
作用: 共享方法