Я пытаюсь установить базовый класс и производный класс с помощью ExtJS с помощью Ext.extend
.Inheritance And ExtJs using 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' });
В этом точка test1.settings
эквивалентна test2.settings
(с использованием blackey2
и blackeypw2
), как если бы они указывали на один и тот же объект, я ищу, как создать независимые объекты.
Спасибо за помощь!
Спасибо за разъяснение! – Blackey
Спасибо за ответ. Можете ли вы прояснить логику того, почему один и тот же экземпляр объекта настроек используется всеми экземплярами классов Base и Derived? Это полностью меня застало врасплох. Обычно можно ожидать, что каждый объект Derived получит собственный экземпляр настроек. –
@PraveenKumar Это из-за прототипного наследования JavaScript. См. [Этот связанный вопрос] (http://stackoverflow.com/questions/4425318/javascript-object-members-that-are-prototyped-as-arrays-become-shared-by-all-cla). – JohnnyHK