Интересный вопросик, опять же связано с "основами" языка
Кто-нибудь может объяснить такую хитрую штуку.. Есть код:
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, время: 07:23. |