傳統(tǒng)寫法:
//old way
function User(username, email) {
this.username = username;
this.email = email;
//not shared method, not recommended
// this.changeEmail = function(email) {
// this.email = email;
// }
}
//shared method
User.prototype.changeEmail = function(email) {
this.email = email;
}
var user = new User('Jack', 'jack@163.com');
user.changeEmail('jack@qq.com');
console.dir(user);
ES2015寫法:
//new style, sugar syntax
class NewUser {
//constructor initial variables
constructor(username, email) {
this.username = username;
this.email = email;
}
//commom method
changeEmail(email) {
this.email = email;
}
// static register(name, email) {
// return new NewUser(name, email);
// }
//static methoad
static register(...args) {
return new NewUser(...args);
}
//getter & setter
get foo() {
return 'bar';
}
//getter & setter
set bar(name) {
this.name = name;
}
}
let user2 = new NewUser('Nike', 'nike@qq.com');
user2.changeEmail('nike@gmail.com');
user2.bar = 'Hello'
console.dir(user2);
// console.dir(NewUser.register('jack', 'jack@qq.com'));
1寂汇、constructor方法
constructor方法是類的默認(rèn)方法病往,通過new命令生成對象實例時自動調(diào)用該方法。一個類必須有constructor方法骄瓣,如果沒有顯式定義停巷,一個空的constructor方法會被默認(rèn)添加。
2榕栏、靜態(tài)方法
類相當(dāng)于實例的原型畔勤,所有在類中定義的方法,都會被實例繼承扒磁。如果在一個方法前庆揪,加上static關(guān)鍵字,就表示該方法不會被實例繼承妨托,而是直接通過類來調(diào)用缸榛,這就稱為“靜態(tài)方法”。
如果在實例上調(diào)用靜態(tài)方法始鱼,會拋出一個錯誤仔掸,表示不存在該方法。
3医清、取值函數(shù)(getter)和存值函數(shù)(setter)
與ES5一樣起暮,在Class內(nèi)部可以使用get和set關(guān)鍵字,對某個屬性設(shè)置存值函數(shù)和取值函數(shù)会烙,攔截該屬性的存取行為负懦。