English 中文(简体)
对象. 原型是 Verboten 吗?
原标题:Object.prototype is Verboten?

RECAP:

OK, 我问这个问题已经有一段时间了。 和往常一样, 我去扩充了 < code> Object. prototype , 尽管这里和网络上其它地方都提出了反对它的所有有效论据。 我猜我只是那种固执的混蛋。

我试图想出一种决定性的方法来防止新的方法搅乱任何预期的行为,这证明是非常艰难的,但需要做的信息丰富的事情。
我学到了很多关于 JavaScript 的事情。 至少我不会尝试任何与原原型一样的乱七八糟的东西, (IE & lt; 9 的 < code> String. prototype. trim 除外)。

在这个特定案例中,我并不使用任何解说,所以冲突并不是我主要关心的。 但是,在与本地原型玩耍时,我对可能发生的灾难深挖了一点,因此我不可能将这一代码与任何解说结合起来。

通过研究这个原型方法,我对模型本身有了更好的理解。 我将原型作为某种灵活的传统抽象类处理,这使我坚持传统的 OOP 思维。 这种观点并不能真正实现原型司法。 道格拉斯·克罗福德写了一篇关于这个陷阱的文章,可悲的是,粉红色的背景让我无法阅读整篇文章。

我决定,在阅读这篇文章的人希望自己看到它的时候,有机会更新这个问题。我只能说:尽我所能,做吧。我希望你像我一样,在决定放弃这个相当愚蠢的想法之前,学到一些整洁的东西。一个简单的功能可能同样有效,甚至更好,特别是在这个情况下。毕竟,它的真正优点是,只要添加3行代码,你就可以使用同样的功能来增加特定物体的原型。


我知道我要问一个已经存在了相当长一段时间的问题,但是:为什么Object.prototype 被认为是 off 限制 ?它就在那里,它可以像任何其他原型一样被扩大。为什么你不应该利用这个机会。在我看来,只要你知道你在做什么,就没有理由避开对象原型。
使用这个方法,例如:

if (!Object.prototype.getProperties)
{
    Object.prototype.getProperties = function(f)
    {
        "use strict";
        var i,ret;
        f = f || false;
        ret = [];
        for (i in this)
        {
            if (this.hasOwnProperty(i))
            {
                if (f === false && typeof this[i] ===  function )
                {
                    continue;
                }
                ret.push(i);
            }
        }
        return ret;
    };
}

基本上,它就是... 在 环中, 您要么在函数中保持安全, 要么一次又一次地写。 我知道它会被添加到“ 坚固 > 所有 < / 坚固” 对象中, 而且因为几乎所有 JavaScript 的继承链都可以追溯到 < code> Object. prototype , 但是在我的脚本中, 我认为它比两个邪恶小。

也许,有人可以做更好的工作,告诉我我哪里错了,而不是