0

假设我有以下代码(可在此jsfiddle 获得):

Ext.onReady(function() {
  Ext.define('TestBlah', {
    extend: 'Ext.panel.Panel',
    counter: 0,
    counters: [],
    initComponent: function() {
      alert("counter: " + this.counter);    // should show 0
      alert("counters: " + this.counters);    // should show nothing
      this.counter++;
      this.counters.push(1);
      this.callParent();
    }
  });

  var one = Ext.create('TestBlah');
  //one.destroy();
  var two = Ext.create('TestBlah');
});

所以我所做的就是创建一个带有 2 个私有变量的简单类:(counter一个 int)和counters(一个数组)。现在,当我创建类时,我希望两者都one不会two从另一个继承。这仅适用于counter. 当我创建two时,它的计数器为 0,计数器数组为 1。即使我在one.destroy();创建之前添加two,它仍然具有计数器的值。这是一个错误吗?

4

1 回答 1

1

这不是一个错误。当您声明一个类时,所有内容都会被推送到类原型,这意味着它们会在所有实例中共享。对于“原始”类型值,它没有任何区别,但对于数组/对象,它们将在类的所有实例之间共享。要修改此行为,请在内部设置计数器initComponent

this.counters = [];

于 2013-11-05T21:29:00.077 回答