Наследовать от родительского класса через $ .extend - PullRequest
2 голосов
/ 05 апреля 2011

Каковы различия между двумя следующими подходами для наследования?

Subclass.prototype = $.extend(true, {}, Parent.prototype, proto);

и

function Subclass(){
    var parent = new Parent();
    $.extend(true, this, parent);
}

Плюсы и минусы каждого подхода?

Спасибо!

РЕДАКТИРОВАТЬ: В настоящее время я использую 1-й подход для расширения своих классов, но вместо этого я подумываю создать экземпляр родительского объекта, чтобы вызвать конструктор класса Parent.Хотя я не уверен, что всегда хотел бы этого ...

1 Ответ

3 голосов
/ 05 апреля 2011

Основное отличие заключается во втором примере, new Parent (), вы фактически вызываете Parent и создаете новый объект, который может вызвать непреднамеренные проблемы.

Используя $ .extend с прототипом, как в первом примере, код запускаться не будет.jQuery рассмотрит прототипы и расширит объект для вас, и не будет возможных побочных эффектов запуска Parent ()

Я не могу объяснить это так же, как и этот парень, у которого есть верхответ: Как "правильно" создать пользовательский объект в JavaScript?

Вот цитата из связанного ответа

Этот пример будет работать, и вы будетеувидеть код, как это во многих учебниках.Но, чувак, этот новый Shape () уродлив: мы создаем экземпляр базового класса, хотя никакого реального Shape создавать нельзя.Это работает в этом простом случае, потому что JavaScript очень небрежный: он позволяет передавать нулевые аргументы, и в этом случае x и y становятся неопределенными и присваиваются прототипам this.x и this.y.Если бы функция конструктора делала что-то более сложное, она бы не получалась.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...