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, в свою очередь, указывает на прототип Родителя. Таким образом, они ВСЕ по-прежнему указывают на одну и ту же позицию в памяти. Это продемонстрировано выше, где выводятся те же точные значения, что и в первом примере. Я понятия не имею, что пытается продемонстрировать этот автор и почему он делает заявления, которые мне не подходят и которые я не могу воспроизвести.
Спасибо за ответ.