私有成员 ECMAScript6 weakmap

把变量放到构造函数里进行私有化,每一个实例都会有一个getName方法,这是低效率的。
function Person(name) { this.getName = function() { return name; }; }

改进,把私有成员数据存到实例上去(把实例保存起来,分配唯一的id),但是问题在于即使实例被垃圾回收那些数据永远保存着。
var Person = (function() {

    var privateData = {},
        privateId = 0;

    function Person(name) {
        Object.defineProperty(this, "_id", { value: privateId++ });

        privateData[this._id] = {
            name: name
        };
    }

    Person.prototype.getName = function() {
        return privateData[this._id].name;
    };

    return Person;
}());


使用weakmap:
var Person = (function() {
     var privateData = new WeakMap();
     function Person(name) {
          privateData.set(this, { name: name });
     }
     Person.prototype.getName = function() {
          return privateData.get(this).name;
      };
     return Person;
}());

posted on 2016-01-27 14:15  迷茫小飞侠  阅读(203)  评论(0编辑  收藏  举报

导航