87,910
社区成员
发帖
与我相关
我的任务
分享
var Person=(function () {
const _first_name = Symbol();
const _last_name = Symbol();
const get_full_name = Symbol();
class Person{
constructor(first_name, last_name){
this[_first_name] = first_name;
this[_last_name] = last_name;
}
get full_name(){
return this[get_full_name]();
}
[get_full_name](){
return `${this[_first_name]} ${this[_last_name]}`;
}
}
return Person;
})();
var Person = (function () {
const _ = Symbol();
class Person{
constructor(first_name, last_name){
this[_] = {
first_name:first_name,
last_name:last_name,
get_full_name(self){
return `${self.first_name} ${self.last_name}`;
},
}
}
get full_name(){
return this[_].get_full_name(this[_]);
}
}
return Person;
})();
// 所有的私有属性都通过 this[_]去访问。
// 唯一麻烦就是私有方法调用要传this[_]
var Person = (function () {
const f = Symbol('f'); // private fields symbol
const m = Symbol('m'); // private methods symbol
class Person {
constructor(first_name, last_name) {
this[f] = {
// define all private fields here
// get field use `this[f].first_name`
first_name: first_name,
last_name: last_name,
};
}
get full_name() {
return this[m].get_full_name.call(this)
}
}
Person.prototype[m] = {
// define all private methods here
// call private method use `this[m].get_full_name.call(this)`
get_full_name() {
return `${this[f].first_name} ${this[f].last_name}`;
},
};
return Person;
})();
自己的改进版,应该是比较完美了。唯一就是 call()比较烦人。