Javascript наследование неправомерное поведение - PullRequest
1 голос
/ 19 октября 2011

У меня здесь есть некоторый js-код ссылка удалена

Если вы откроете консоль js и запустите этот фрагмент кода

var r = new TempPopupForm("xxx");
r.create();

, появится ошибка

TypeError: this.init is not a function

эта ошибка говорит о том, что в этом объекте не реализован метод init.

Но это не так. Как видно из кода ниже, объявлен метод init.

TempPopupForm.prototype = new PopupForm();
TempPopupForm.prototype.constructor = TempPopupForm;
TempPopupForm.superclass = PopupForm.prototype;

function TempPopupForm(name) {
     this.init(name);
}
TempPopupForm.prototype.init = function(name) {
     TempPopupForm.superclass.init.call(this, name);
};

Я думаю, что-то не так с определением наследования, но я не могу понять, что это такое.

Кстати, есть некоторые сторонние зависимости.

РЕДАКТИРОВАТЬ

Я следил за этой статьей и там, где фанки упорядочены, как у меня.Порядок действительно работает на других классах, но не на этом.http://www.kevlindev.com/tutorials/javascript/inheritance/inheritance10.htm

1 Ответ

0 голосов
/ 19 октября 2011

Вам необходимо изменить порядок своих функций и создания экземпляров. Поскольку ваш конструктор использует один из своих собственных прототипированных методов для инициализации, они оба должны находиться над блоком, в котором вы создаете экземпляр объекта. JavaScript поднимает функции верхнего уровня.

Попробуйте это -

function TempPopupForm(name) {
     this.init(name);
}

TempPopupForm.prototype = new PopupForm();
TempPopupForm.prototype.constructor = TempPopupForm;
TempPopupForm.superclass = PopupForm.prototype;

TempPopupForm.prototype.init = function(name) {
     TempPopupForm.superclass.init.call(this, name);
};

var r = new TempPopupForm("xxx");
r.create();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...