【问题标题】:JavaScript Extend Class with hidden functions带有隐藏函数的 JavaScript 扩展类
【发布时间】:2015-11-22 13:03:45
【问题描述】:

我今天遇到了这个问题:

我想用一些有用的功能扩展一个 JavaScript Object 类,所以我写了这样的东西:

Object.prototype.fn = function() {
    // Do some cool stuff...
};

然后我使用另一个函数来做这样的循环:

for( var i in obj ) {
    this[i] = obj[i]; // 'this' --> is another Object
    console.log( i, obj[i] );
}

所以我把东西从'obj'移到另一个对象。但是,正如您在日志中看到的那样,“fn”函数现在要么在我的扩展对象中,要么在 __proto__ 中。我只想在我的“for”循环中避免这种情况:

if( typeof obj[i] !== 'function' ) // Then do it

所以我想知道如何实现原生函数(例如 toString())以在原型之外保持不可见。有什么建议吗?

【问题讨论】:

    标签: javascript object prototype


    【解决方案1】:

    您可以使用一种名为defineProperty 的方法来设置您的属性并使其不可枚举(或者如您所说,保持不可见):

    var obj = {};
    Object.defineProperty(obj, 'test', {
      enumerable: false,
      configurable: false,
      writable: true,
      value: 'hello'
    });
    

    您的属性 obj.test 存在(值为 hello)但现在不可枚举,因此请执行以下操作:

    for(var i in obj) console.log(i);
    
    // OR
    
    Object.keys(obj);
    

    不会打印“测试”,但您仍然可以将其作为属性访问 (obj.test)

    【讨论】:

    • 这是一个不错的解决方案!它对我有用。非常感谢!
    猜你喜欢
    • 2015-06-15
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 2018-09-24
    • 2011-06-02
    相关资源
    最近更新 更多