使用_.扩展函数原型

Using _.extend in Function prototype

本文关键字:原型 函数 扩展 使用      更新时间:2023-09-26

这些天我看到很多这样的事情:

function Dog () {
    this.name = 'Fido';
}
_.extend(Dog.prototype, {
    bark: function() {
        return 'BARK, BARK!'
    },
    soilChothingWithDirtyPaws: function () {
        // Some intricated logic here
        return 'There, I did it!';
    }
});

但是结果与下面的代码不同吗?

function Dog () {
    this.name = 'Fido';
}
Dog.prototype = {
    bark: function() {
        return 'BARK, BARK!'
    },
    soilChothingWithDirtyPaws: function () {
        // Some intricated logic here
        return 'There, I did it!';
    }
}

我知道下划线的扩展函数应该做什么,但我真的不明白在对象的原型中这样做的意义-当你可以用普通的老式JS做这件事时,这意味着,我看不出为什么这里需要一个人在中间。我想知道我是否错过了一些非常棒的东西。

那有什么好处吗?

如果有人把东西清理干净就太好了。非常感谢!

_.extend是这样定义的,

_.extend = function(obj) {
    each(slice.call(arguments, 1), function(source) {
        if (source) {
            for (var prop in source) {
                obj[prop] = source[prop];
            }
        }
    });
    return obj;
};

它所做的就是从索引1处的参数开始迭代所有元素的属性,直到最后,并将其添加到传递给它的第一个参数中。

所以,从技术上讲,你所做的会有同样的效果,但是有一个细微的区别。

当您使用_.extend时,您正在增加Dog.prototype对象,当您分配给它时(如在第二个示例中),您正在用其他对象替换Dog.prototype对象。