Здравствуйте!
Поясните пожалуйста по 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); ???
Спасибо.