Вопрос реализации наследования Javascript - PullRequest
2 голосов
/ 02 октября 2009

В своей статье на сайте о наследовании javascript Гарри Фьюкс объясняет способ реализации наследования следующим образом:

    function copyPrototype(descendant, parent) {
    var sConstructor = parent.toString();
    var aMatch = sConstructor.match( /\s*function (.*)\(/ );
    if ( aMatch != null ) { descendant.prototype[aMatch[1]] = parent; }
    for (var m in parent.prototype) {
        descendant.prototype[m] = parent.prototype[m];
    }
};

Хотя я понимаю его код, возникает один вопрос - почему бы не удалить цикл for и просто сделать это:

 function copyPrototype(descendant, parent) {
    var sConstructor = parent.toString();
    var aMatch = sConstructor.match( /\s*function (.*)\(/ );
    if ( aMatch != null ) { descendant.prototype[aMatch[1]] = parent; }
    descendant.prototype = parent.prototype;
};

Спасибо.

1 Ответ

3 голосов
/ 02 октября 2009

Назначение prototype одного function другому будет означать только ссылку на оригинал prototype; оба будут использовать один и тот же объект prototype. Итерация по prototype создает поверхностную копию всех его членов.

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