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 に答える