js中不支持private关键字私有属性,但是在实际项目中可能有这种需求,因此我们可以利用es6的一些特性来比较完美的模拟这种私有属性。下面提供了两种方法。
1.使用symbol来模拟私有属性,因为Symbol是唯一的,且在外面不能拿到_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;
}());