【发布时间】:2015-06-13 19:23:10
【问题描述】:
我问是因为我在这里看到了:
https://github.com/bengrunfeld/react-flux-simple-app/blob/master/src/js/stores/AppStore.js
var AppStore = assign({}, EventEmitter.prototype, {
emitChange: function() {
this.emit(CHANGE_EVENT);
}
});
我明白我们为什么要分配EventEmitter 原型,我们想要EventEmitter 的所有功能;我们分配的最后一个对象是覆盖emitChange 事件。但是为什么第一个参数是一个空对象({})?这是必要的吗?我已经看过几次了。
【问题讨论】:
-
这是创建新对象的一种方法。如果函数期望第一个参数是一个对象,你必须发送一个。
-
但是你不能先把原型传进去吗?
-
@KennyWorden:然后它将扩展该原型,这是不可取的。我们只想扩展我们的新对象。
-
原谅我@Bergi,但我还是不明白——我们不想扩展
EventEmitter吗?这不就是我们将原型作为参数传递的全部原因吗? -
不,代码确实创建了一个新对象(通过该文字
{}),使用EventEmitter方法扩展 it,并将新对象分配给 @ 987654330@。如果您忽略了新对象,您将获得AppStore === EventEmitter.prototype,并在该全局对象上拥有您的自定义方法。不是我们想要的。
标签: javascript