Цепочка прототипов в JavaScript

I ' Я читаю книгу под названием «Шаблоны JavaScript», но есть одна часть, где, я думаю, этот парень сбивает с толку.

Этот парень фактически привел в книге к шаблону проектирования klass, где он разработал его по частям. Сначала он представляет проблему:

function inherit(C, P) {
C.prototype = P.prototype;
}

Он говорит:

« Это дает вам короткий и быстрый поиск по цепочке прототипов, потому что все объекты фактически используют один и тот же прототип. Но это также ОТКАЗ, потому что если один ребенок или внук В качестве решения он предлагает следующее:

function inherit(C, P) {
var F = function () {};
F.prototype = P.prototype;
C.prototype = new F();
}

Проблема в том, что он выводит те же точные значения, что и другой шаблон:

function Parent(){}

Parent.prototype.say = function () {
return 20;
};

function Child(){
}

 Child.prototype.say = function () {
return 10;
};

inherit(Child, Parent);

function inherit(C, P) {
var F = function () {};
F.prototype = P.prototype;
C.prototype = new F();
}

var parent = new Parent();
var child = new Child();


var child2 = new Child()
alert(child.say(); //20
alert(parent.say()); //20
alert(child2.say()); //20

Не имеет смысла, что пустая функция каким-то образом разрывает ссылку. Фактически, Дочерний указывает на F, а F, в свою очередь, указывает на прототип Родителя. Таким образом, они ВСЕ по-прежнему указывают на одну и ту же позицию в памяти. Это продемонстрировано выше, где выводятся те же точные значения, что и в первом примере. Я понятия не имею, что пытается продемонстрировать этот автор и почему он делает заявления, которые мне не подходят и которые я не могу воспроизвести.

Спасибо за ответ.

8
задан Nicholas K 19 October 2019 в 17:32
поделиться