Javascript 使用extend的继承和ExtJs

Javascript 使用extend的继承和ExtJs,javascript,extjs,Javascript,Extjs,我正在尝试使用ExtJS使用Ext.extend设置基类和派生类 :基类: var Base = Ext.extend(Object, { settings: {}, constructor: function(args) { var baseArgs = { 'user': '', 'password': '' }; Ext.apply(this.settings, args, baseArgs); } }); var Derived

我正在尝试使用ExtJS使用
Ext.extend
设置基类和派生类

:基类:

var Base = Ext.extend(Object, {
    settings: {},
    constructor: function(args) {
        var baseArgs = { 'user': '', 'password': '' };
        Ext.apply(this.settings, args, baseArgs);
    }
});
var Derived = Ext.extend(Base, {
    constructor: function(args) {
        Derived.superclass.constructor.call(this, args);
    }
});
var test1 = new Derived({ 'user': 'blackey1', 'password': 'blackeypw1' });
var test2 = new Derived({ 'user': 'blackey2', 'password': 'blackeypw2' });
:派生类:

var Base = Ext.extend(Object, {
    settings: {},
    constructor: function(args) {
        var baseArgs = { 'user': '', 'password': '' };
        Ext.apply(this.settings, args, baseArgs);
    }
});
var Derived = Ext.extend(Base, {
    constructor: function(args) {
        Derived.superclass.constructor.call(this, args);
    }
});
var test1 = new Derived({ 'user': 'blackey1', 'password': 'blackeypw1' });
var test2 = new Derived({ 'user': 'blackey2', 'password': 'blackeypw2' });
:问题:

var Base = Ext.extend(Object, {
    settings: {},
    constructor: function(args) {
        var baseArgs = { 'user': '', 'password': '' };
        Ext.apply(this.settings, args, baseArgs);
    }
});
var Derived = Ext.extend(Base, {
    constructor: function(args) {
        Derived.superclass.constructor.call(this, args);
    }
});
var test1 = new Derived({ 'user': 'blackey1', 'password': 'blackeypw1' });
var test2 = new Derived({ 'user': 'blackey2', 'password': 'blackeypw2' });
此时,
test1.settings
相当于
test2.settings
(使用
blackey2
blackeypw2
)就好像它们指向同一个对象一样,我正在寻找如何创建独立的对象


谢谢你的帮助

对于当前代码,空的
设置
对象将添加到
基本
的原型中,这样一个
设置
对象将由
基本
的所有实例和从
基本
派生的类的任何实例共享(如
派生
)。相反,您应该在
Base
constructor
函数中创建空的
settings
对象,以便每个实例获得自己的
设置
对象:

var Base = Ext.extend(Object, {
    constructor: function(args) {
        var baseArgs = { 'user': '', 'password': '' };
        this.settings = {};
        Ext.apply(this.settings, args, baseArgs);
    }
});

谢谢你的澄清!谢谢你的回答。能否请您澄清一下,为什么基类和派生类的所有实例都共享同一个settings对象实例背后的逻辑?这完全出乎我的意料。人们通常期望每个派生对象都会获得自己的设置实例。@PraveenKumar这是因为JavaScript的原型继承。看见