Показать сообщение отдельно
  #1 (permalink)  
Старый 03.04.2013, 12:35
Аспирант
Отправить личное сообщение для xfreewindx Посмотреть профиль Найти все сообщения от xfreewindx
 
Регистрация: 19.08.2012
Сообщений: 33

Вопросы про наследование
Здравствуйте!

Поясните пожалуйста по prototype
Есть код:
//Shape - superclass
function Shape() {
  this.x = 0;
  this.y = 0;
}
 
Shape.prototype.move = function(x, y) {
    this.x += x;
    this.y += y;
    console.info("Shape moved.");
};
 
// Rectangle - subclass
function Rectangle() {
  Shape.call(this); //call super constructor.
}
 
Rectangle.prototype = Object.create(Shape.prototype);
 
var rect = new Rectangle();
 
rect instanceof Rectangle //true.
rect instanceof Shape //true.
 
rect.move(); //Outputs, "Shape moved."


1. Для каких целей мы запихиваем move в prototype? Shape.prototype.move. У нас вроде new Shape нигде нет, что это нам даст? Если бы было new Shape, тогда у прототипа Shape был бы метод move, насколько я понял. И этот прототип видимо был бы безымянный объект, верно?

2. Не понимаю как работает Object.create в этой строке
Rectangle.prototype = Object.create(Shape.prototype);

Я понимаю, что в итоге Rectangle.prototype присваивается метод move из Shape.prototype. Но не совсем понимаю как. В учебнике написано, что Object.create создает пустой объект. Как у нас наследование тогда происходит? Rectangle<-пустой объект<-Shape. Можете попонятнее объяснить? И почему не написать
Rectangle.prototype = Object.create(Shape);
вместо
Rectangle.prototype = Object.create(Shape.prototype); ???

Спасибо.
Ответить с цитированием