我正在查看 Backbones v1.0.0 源代码并注意到一些有趣的东西。在 Backbone.Events 对象中,“ on ”方法似乎将变量链接到对象值:
on: function(name, callback, context) {
if (!eventsApi(this, 'on', name, [callback, context]) || !callback) return this;
this._events || (this._events = {});
var events = this._events[name] || (this._events[name] = []);
events.push({callback: callback, context: context, ctx: context || this});
return this;
},
“ events ”变量设置为“ this._events[name] ”值,该值可以是现有数组或设置为空数组。奇怪的部分是将一个对象推入这个数组的下一行。推送之后,如果您现在检查“ this._events[name] ”的值,它现在在其数组的末尾有那个新对象。在我看来,这两者本质上是联系在一起的;当您更新一个时,另一个也会更新。
我以前没有遇到过这样的事情,做一个简单的浏览器控制台测试可以确认这种行为。你更新一个,另一个也得到更新。它似乎只适用于数组的对象值。谁能解释这里发生了什么?我有点困惑?