js中不支持private關(guān)鍵字私有屬性,但是在實(shí)際項(xiàng)目中可能有這種需求鸯两,因此我們可以利用es6的一些特性來比較完美的模擬這種私有屬性。下面提供了兩種方法长豁。
1.使用symbol來模擬私有屬性钧唐,因?yàn)镾ymbol是唯一的,且在外面不能拿到_name變量匠襟,因此該變量只能在Person中自己使用。
const Person = (function(){
var _name = Symbol('name');
class Person {
constructor() {
this[_name] = 'haha';
}
get name() {
return this[_name];
}
}
return Person
})()
var person = new Person();
console.log('person', person.name);
該方式是使用weakMap來存儲私有屬性值帅韧。
let Person = (function() {
let privateData = new WeakMap();
function Person(name) {
privateData.set(this, {name: name});
console.log(privateData);
}
Person.prototype.getName = function() {
return privateData.get(this).name;
};
return Person;
}());