这些天我看到了很多这样的东西:
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!';
}
}
我知道下划线的 extend 是什么函数应该做的,但我真的不明白在对象的原型(prototype)中这样做的意义——当你可以用普通的旧 Vanilla 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
对象与其他对象。
关于javascript - 在函数原型(prototype)中使用 _.extend,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22546017/