Я пытался использовать следующий код, чтобы добавить метод start
к объекту:Почему объект инициализации JavaScript не содержит объект-прототип?
var Bounce = Bounce || {
Info : {},
Game : {}
};
Bounce.Game.prototype.start = function() {
Bounce.log("Starting " + new Bounce.Info());
}
Но это приводит к следующей ошибке (на Bounce.Game.prototype.start
линии):
Uncaught TypeError: Cannot set property 'start' of undefined
Глядя на объект в консоли Chrome я вижу, что он не содержит объект prototype
(но имеет toString
, valueOf
и constructor
и т. д.).
Это легко исправить, добавив следующую строку перед въездом прототипа:
Bounce.Game = function() {};
Я не знаю, почему это необходимо, когда объект уже инициализирована?
W3Schools говорит мне, что «у каждого объекта JavaScript есть прототип», но это, похоже, не так.
«Прототип», который, как вы считали, вы обращаетесь, на самом деле '__proto__'. – Leo
Это ваше намерение, что 'Bounce.Game' будет классом? Если это так, это должна быть функция, а не '{}'. Если нет, то я не уверен, что вы надеетесь выполнить, установив метод на своем прототипе, а не непосредственно на самом объекте. –
Понятно, что все объекты имеют прототип, но только объекты-объекты имеют свойство 'prototype' ** **. Они не одинаковы. Если вы читаете спецификацию ECMAScript, прототип обычно представляется как ** [[Prototype]] **, который является детальностью реализации, находится в JS-движке, а не в языковой функции. Однако в некоторых движках ** [[Prototype]] ** можно получить доступ к свойству '__proto__'. – Leo