Вопрос по javascript – Почему функции прототипа связаны последовательно?

9

Я очень плохо знаком с JavaScript. Я читаю из JavaScript хорошие части. Это говорит:

Every function object is also created with a prototype property

Итак, я сделал что-то вроде этого:

function test() {
}

console.log(test.prototype);

Используя инструменты разработчика Chrome, я нахожу вывод следующим образом:

enter image description here

Я действительно запутался с этим выводом. Почемуconstructor& APOS; sprototype свойство снова вложеноconstructor? И почему это происходит какchain? Где мне не хватает концепции?

Заранее спасибо.

Ваш Ответ

2   ответа
2

Он охватывает больше javascript с точки зрения программистов, охватывая все объектно-ориентированные методы, и большинство вещей в нем не освещены в других книгах по javascript.

И про прототип. Каждый объект в JavaScript содержит скрытый фрагмент состояния & # x2013; ссылка на другой объект, известный как прототип объекта. Объекты-прототипы в JavaScript дают нам наследование, и они также позволяют нам совместно использовать реализации методов. Прототипы тоже цепочки. Другими словами, поскольку объект-прототип является просто объектом, тогда объект-прототип может поддерживать ссылку на другой объект-прототип.

Прототип в Javascript - это немного сложная часть, которую я испытал, изучая ее.

Это отличныйссылка знать, как работает прототип в JS.

Спасибо за +1 :)
Эта ссылка была потрясающей, спасибо.
10

prototype свойство функции содержит объект, от которого все экземпляры этой функции будут наследоваться при создании сnew оператор. И все эти объекты-прототипы (обычно) имеютconstructor свойство, которое указывает на функцию - там у вас есть круговая ссылка. Итак, какnew test() наследует это свойство,(new test).constructor === test оцениваетtrue.

Вам нужно будет различатьprototype свойство объекта функции и объекта-прототипа, от которого наследуется объект - часто упоминается как & quot; внутренний[[prototype]] Свойство & Quot ;.

Конструктор - это функция, а неFunctionи имеет оба. Поэтому он наследует отFunction.prototype объект - гдеconstructor свойство говорит о том, что все функции построеныFunction конструктор. Если ваша консоль разработчиков покажет прототипFunction объекты, вы могли их видеть. Я думаю, что есть опция в настройках.

Итак, знаменитая «цепочка прототипов» не оconstructor и / илиprototype свойства, но об объекте-прототипе, от которого этот объект наследует от:

 function test() {}              new test()
   (a Function)              (a test instance)
        ||                           ||
        ||                           ||
        \/                           \/
 Function.prototype            test.prototype
(a Function, by spec)           (an Object)
        ||                           ||
        ||                           ||
        \/                           \/
 Object.prototype             Object.prototype
        ||                           ||
        ||                           ||
        \/                           \/
       null                         null
Хороший ответ .. Много вещей, которые можно взять из вашего ответа :) Ant's
Спасибо за ссылку, я уже задумался о выводе при быстрой проверкеObject.getPrototypeOf(test) в консоли ...
@jason: & quot; функция конструктора & quot; оба а) конструктор, который имеет.prototype собственность и б) объект - более конкретноFunction экземпляр - который наследует свойства от своего прототипа.
@ Bergi - Пожалуйста, объясните - & quot; Конструктор - это функция, а не функция, и имеет и то, и другое. Поэтому он наследуется от объекта Function.prototype & quot;

Похожие вопросы