Я знаю, что свойство prototype
функциональных объектов JavaScript копируется во внутреннее свойство [[Prototype]]
(a.k.a. __proto__
) объектов, созданных с использованием функции в качестве конструктора. Итак, я могу установить это свойство для любого объекта, который я хочу использовать в качестве прототипа:
function Foo() {}
Foo.prototype = {
toString: function() { return "I'm a Foo!"; }
}
new Foo().toString()
// --> "I'm a Foo!"
Кажется, что широко распространенной практикой является добавление функций, которые должны действовать как методы класса, к существующему прототипу вновь сгенерированных функций, например:
function Bar() {}
Bar.prototype.toString = function() {
return "I'm a Bar!";
}
new Bar().toString()
// --> "I'm a Bar!"
Однако мне неясно, каково начальное значение *1013* свойства prototype
.
function Baz() {}
Baz.prototype
// --> Baz {
// constructor: function Baz() {},
// __proto__: Object
// }
Комментарий показывает, что печатает консоль Chrome на JavaScript. Означает ли это, что каждая функция, которую я создаю, на самом деле создает два объекта? Один для самой функции (constructor
) и один для ее прототипа?
Это определено где-то в стандарте ECMAScript? Я пытался найти это, но не смог. Все ли браузеры обрабатывают это одинаково?