【问题标题】:Add a method to Object primative, but not have it come up as a property向原始对象添加方法,但不将其作为属性出现
【发布时间】:2011-07-10 16:19:47
【问题描述】:

Object 有Object.toString,您可以在任何对象上调用该方法。当遍历属性列表时,或者只是做一个 console.log(obj),你不会看到 toString 作为对象的属性出现。它被隐藏了。

我想在 Object 原语上添加一个新方法,使用 Object.prototype.myMethod。但是,我不希望每次迭代对象时都会出现它。我想把它隐藏起来。

我该怎么做?

【问题讨论】:

    标签: javascript prototype-programming


    【解决方案1】:

    您可以使用 ECMAScript 5 的 defineProperty [docs] 做到这一点:

    Object.defineProperty(Object.prototype, 'myMethod', {
        value: function() {
            // your function
        },
        enumerable: false // default is already `false`
    });
    

    显然这在不支持 ES5(尤其是 IE8 和更早版本)的浏览器中不起作用。

    【讨论】:

    • 那么Object.toString()是该语言的一个特殊功能?
    • @Mrchief:取决于您对特殊的含义。它是规范中定义的方法:ecma262-5.com/ELS5_HTML.htm#Section_15.2.4.2
    • 在 ES5 之前的特殊意义上,这不是你可以自己做的事情,它与语言一起出现。
    • @Mrchief:是的。我的意思是,一直有这种内部属性,但它们以前不能针对自定义方法进行修改。
    • 这个解决方案对我很有效(我在 node.js 下这样做)
    猜你喜欢
    • 2017-09-18
    • 2018-10-23
    • 2017-01-12
    • 2012-03-20
    • 2018-07-24
    • 2016-04-05
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多