在构造函数内存中嵌套函数效率低下吗?

时间:2015-09-27 18:49:16

标签: javascript

我一直在观看精彩的Crockford on JavaScript视频,并且他认为使用new运算符和<some object>.prototype可能令人困惑,因此他提出了一个替代方案(如所见) here大约在1:00:40标记处):

function gizmo(id) {
    return {
        id: id,
        toString: function () {
            return "gizmo " + this.id;
        }
    };
}

function hoozit(id) {
    var that = gizmo(id);
    that.test = function (testid) {
        return testid === this.id;
    };
    return that;
}

人们确实可以说这看起来更干净,只需分别调用gizmo()hoozit()即可实例 gizmo hoozit 。但是,基于我对嵌套函数如何工作的理解,如果我在某个时刻有1000个hoozit实例,我会有toString的1000个“副本”和test的1000个“副本”而不是如果将这些函数分别添加到 gizmo hoozit 的原型中,则只需要其中一个。

Crockford提供这样一个良好实践的例子似乎很不寻常,所以我想知道这里是否有我遗漏的东西(例如一些隐藏的JS优化)或者这只是一个代价是提高代码质量的情况性能

编辑:由于 melpomene 在评论中指出这些嵌套函数是否是闭包可能很重要,请考虑以下超级方法示例(同一视频,{ {3}},略微简化):

function hoozit(id) {
    var that = gizmo(id);
    var super_toString = that.toString;
    that.test = function (testid) {
        return testid === this.id;
    };
    that.toString = function () {
        return super_toString.apply(that);
    };
    return that;
}

在这种情况下,内部函数实际上会关闭thatsuper_toString,所以我认为存在一些优化的可能性较小。

0 个答案:

没有答案