当前位置:  开发笔记 > 编程语言 > 正文

原型上的Javascript私有成员

如何解决《原型上的Javascript私有成员》经验,为你挑选了1个好方法。



1> Christoph..:

JavaScript传统上没有提供属性隐藏机制('私有成员').

由于JavaScript是词法范围的,你可以使用构造函数作为对"私有成员"的闭包并在构造函数中定义方法,从而在每个对象级别上模拟这个,但这不适用于在构造函数的原型属性.

当然,有办法解决这个问题,但我不推荐它:

Foo = (function() {
    var store = {}, guid = 0;

    function Foo() {
        this.__guid = ++guid;
        store[guid] = { bar : 'baz' };
    }

    Foo.prototype.getBar = function() {
        var privates = store[this.__guid];
        return privates.bar;
    };

    Foo.prototype.destroy = function() {
        delete store[this.__guid];
    };

    return Foo;
})();

这会将"私有"属性存储在与您的Foo实例分开的另一个对象中.确保destroy()在完成对象后调用:否则,您刚刚创建了内存泄漏.


编辑2015年12月1日: ECMAScript6使得不需要手动物件破坏可能的,例如通过使用改进的变体WeakMap或优选符号,避免了对外部存储完全的需要:

var Foo = (function() {
    var bar = Symbol('bar');

    function Foo() {
        this[bar] = 'baz';
    }

    Foo.prototype.getBar = function() {
        return this[bar];
    };

    return Foo;
})();

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有