【发布时间】:2014-07-17 14:50:00
【问题描述】:
我看过不少教程或代码示例,其中开发人员使用 Underscore 的 _.extend 方法或 Lodash 的 _.assign 方法,而只需添加属性就足够了,我总是感到困惑,有什么好处使用扩展/分配而不是简单地添加属性?有很多时候,我可以看到使用这些方法的好处,例如从另一个对象添加多个属性时,但我经常看到它在下面的示例中使用,但我没有看到任何好处。
以下代码是否有我不知道的好处而不是分配属性?
http://tech.pro/tutorial/1734/building-decoupled-javascript-applications-with-postaljs
var Weather = function() {
this.channel = postal.channel( "weather" );
this.channel.subscribe( "fetch", this.fetch ).withContext( this );
};
_.extend(Weather.prototype, {
fetch: function( city ) {
$.ajax({
url: "http://openweathermap.org/data/2.1/find/name?q=" + city + "&units=imperial",
dataType: "jsonp",
success: _.bind(function( data ) {
this.channel.publish( "fetched", data.list[ 0 ] );
}, this )
});
}
});
比如上面的代码就不能这样重写吗:
Weather.prototype.fetch = function(...){...}
或者对此有负面影响?
【问题讨论】:
-
这可能只是一个成语,使用相同的样式将一个属性添加为多个。
-
这是有道理的,也是我的想法,我想确认我没有错过一些与性能或错误相关的好处。
-
我会第二个成语;
_.extend(Weather.prototype...的读取方式与它所做的完全一样,扩展了Weather对象的原型。 -
@Mathletics 唯一的问题是没有为 JS/ES 定义“扩展”术语。而对于其他命令式语言,它意味着不同的东西。
-
@zerkms 对于第一点,这就是为什么
extend在这么多附加库中定义的原因。其次,您是指扩展类与扩展原型之间的区别吗?
标签: javascript underscore.js lodash