У нас есть конструкторы:
F
, Super
& Sub
.
У нас есть объекты f
, super
, & sub
, которые созданы с использованием указанных конструкторов.
т.е. f = new F
, super = new Super
, sub = new Sub
Мы знаем f.__proto__ === super.__proto__ === Super.prototype
из строки 2
Из строки 3 мы видим, что sub.__proto__ === f
& sub.__proto__.__proto__ === Super.prototype
Также у нас есть Sub.superClass === Super.prototype
из строки 5.
и из строк 4 и 6 можно сказать, что sub.constructor === Sub
& super.constructor === Super
Причина, по которой мы можем вызвать new F
перед строкой 3 перед строкой 7, заключается в том, что в строке 7 установлено значение
f.__proto__.constructor === Super
, где f.constructor
уже Sub
. в основном строка 7 очищает Super
и не должна влиять на Sub
, потому что вы никогда не должны вызывать .__proto__.constructor
в реальном коде.
Эта конкретная функция explicity не вызывает Super
как функцию, а только удостоверяется, что объекты, построенные через Sub
, имеют Super.prototype
в своей цепочке.