Интересный вопросик, опять же связано с "основами" языка
Кто-нибудь может объяснить такую хитрую штуку.. Есть код:
function Car(speed) { Car.prototype = { getSpeed: function() { return speed; } } Car.prototype.constructor = Car; } var car = new Car(100); Почему car не видит метода getSpeed? car.getSpeed(); //ошибка car.constructor.prototype.getSpeed(); //вернет speed=100 В то же время можно делать так (не переопределяя прототип): function Car(speed) { Car.prototype.getSpeed = function() { return speed; } } var car = new Car(100); car.getSpeed(); //100 |
|
Прочитал ссылку выше, но мало что понял, так как есть противоречия..
Я совсем уже ничего не понимаю. Выкладываю весь код (с дополнением): function Car(speed) { Car.prototype = { getSpeed: function() { return speed; } } Car.prototype.constructor = Car; } var car = new Car(100); var car2 = new Car(200); car.__proto__ // нет метода getSpeed - почему? car2.__proto__ // есть метод getSpeed - почему? car.__proto__ === Car.prototype; // false - почему? car2.__proto__ === Car.prototype; //false - почему? |
Цитата:
Цитата:
Цитата:
|
Получается, что когда я вызываю var car = new Car() впервые, то:
1. Создается объект car (вернее this) 2. car.__proto__ (this.__proto__) присваивается текущий прототип, то есть car.__proto__ = Car.prototype, без метода getSpeed 2. А вот далее уже выполняется конструктор, в котором Car.prototype изменяется Спасибо! |
P.S. не надо так делать - прототип в конструкторе присваивать - только сейчас дошло ) Его достаточно 1 раз вне конструктора инициализировать
|
Часовой пояс GMT +3, время: 02:16. |