0

在 ExtJS 3 到 4 的迁移过程中,我遇到了一个问题,我想知道是否有人解决了问题:即,如何扩展具有私有范围的单例?

在 Ext3 中,我会使用 Extend:

Ext.namespace("My.New.Obj");

My.New.Obj = (function() {
    var privateVar = 3;
    function privateFunc() { alert(privateVar); }

    var extendedObj = Ext.extend(My.Other.Obj, {
        newFunc: function() { alert(this.publicVar+privateVar); },
        publicVar: 4
    });

    return new extendedObj();
})();

据我所知,我会使用 Ext.define 创建一个单例模式,但我不知道如何扩展内部对象。

Ext.define('My.New.Obj', function() {
  var privateVar = 3;
  function privateFunc() { alert(privateVar); }

  var extendedObj = Ext.create('My.Old.Obj',{
    newFunc: function() { alert(this.publicVar+privateVar); },
    publicVar: 4
  });

  return extendedObj;
});

上面例子的唯一问题是我相信在 Ext.extend 中保留的超级方法被覆盖了。

如何在保持私有范围的同时扩展单例?

4

1 回答 1

2
Ext.define('A', {
    someMethod: function(){
        return 'a';
    }
});

Ext.define('B', (function(){
    var fn = function(){
        return 'b';
    };

    return {
        extend: 'A',

        someMethod: function(){
            return this.callParent() + fn();
        }
    }
})());

console.log(new A().someMethod());
console.log(new B().someMethod());
于 2012-09-19T23:16:30.073 回答