【问题标题】:What is the point of object assigning to an empty object?将对象分配给空对象有什么意义?
【发布时间】: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


【解决方案1】:

这是由于 assign 方法的语法将您要放置来自第二个对象的方法的对象作为第一个参数。您可以将其与现有对象一起使用,但如果您没有对象,则传递一个新的空对象 {} 分配复制所有方法和属性并返回修改后的对象。

看看这个: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

【讨论】:

  • 原型怎么样?它说:“它在源上使用 [[Get]],在目标上使用 [[Put]]……如果合并源包含 getter,这可能会使其不适合将新属性合并到原型中……”那是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 2018-02-02
  • 2019-02-02
  • 2018-11-13
相关资源
最近更新 更多