"W javascript każdy obiekt ma tajne łącze do obiektu, który go utworzył, tworząc łańcuch. Gdy obiekt jest żądany dla właściwości, której nie ma, jego obiektem nadrzędnym jest zapytałem ... ciągle w górę łańcucha aż do znalezienia właściwości lub do momentu osiągnięcia obiektu głównego "Dziedziczenie metod w łańcuchu prototypów JavaScriptu
Wszystko, zawsze uważam, że powyższe słowa są prawdą nawet teraz, więc zrobiłem test, aby to zweryfikować, ma na celu zdefiniowanie relacji obiektów takich jak poniżej. przejrzyj go.
Kod powinien wyglądać jak poniżej.
//Shape - superclass
function Shape() {
this.x = 0;
this.y = 0;
};
Shape.prototype.move = function(x, y) {
this.x += x;
this.y += y;
alert('Shape move');
};
// Rectangle - subclass
function Rectangle() {
Shape.call(this); //call super constructor.
}
Rectangle.prototype.move = function(x, y) {
this.x += x;
this.y += y;
alert('Rectangle move');
};
// Square - subclass
function Square(){
Shape.call(this);
}
Rectangle.prototype = Object.create(Shape.prototype);
Square.prototype=Object.create(Rectangle.prototype);
var rect = new Rectangle();
var sq= new Square();
sq.x=1;
sq.y=1;
sq.move(1,1);
Ponieważ metoda move
nie można znaleźć w Square.prototype
, więc JavaScript, znajdzie je w swoich obiektach nadrzędnych po łańcuchu, myślałem Okaże się w Rectangle.prototype
, ale w rzeczywistości znajduje się w root Shape.prototype
, Więc nie mogę zrozumieć, dlaczego sq.move(1,1)
nazywa się Shape.prototype.move
zamiast wywoływania metody move
z Rectangle.prototype
? Czy coś przeoczyłem? Dzięki.
powinna 'Square()' 'contructor wezwanie Rectangle()' 'zamiast Shape()'? – nnnnnn
Ponieważ 'Square' jest podklasą' Shape' zamiast podklasy 'Rectangle' (?) – DaGLiMiOuX
@ All Pozwól mi spróbować, myślę, że to nie problem. –