Читать «Изучаем программирование на JavaScript» онлайн - страница 324
Unknown
}
}
Секрет этой игры: при достижении
}
уровня 42 в прототип добавляется
новый метод. Это означает, что
function Robot(name, year, owner) {
все роботы наследуют способность
this.name = name;
применения лазеров!
this.year = year;
this.owner = owner;
}
var game = new Game();
var robby = new Robot("Robby", 1956, "Dr. Morbius");
var rosie = new Robot("Rosie", 1962, "George Jetson");
while (game.level < 42) {
game.play();
}
robby.deployLaser();
rosie.deployLaser();
v
Мы встроили в наших роботов Робби и Рози новую функцию: теперь они могут сообщать о возникающих
ошибках при помощи метода reportError. Проанализируйте приведенный ниже код, обращая особое
внимание на то, откуда этот метод получает информацию об ошибках и откуда берется эта информация:
из прототипа или экземпляра.
Ниже приведено наше решение.
function Robot(name, year, owner) {
this.name = name;
this.year = year;
this.owner = owner;
}
Метод reportError
ет
только использу
Robot.prototype.maker = "ObjectsRUs";
значение errorMessage,
е-
Robot.prototype.errorMessage = "All systems go.";
поэтому он не пер
определяет свойство.
Robot.prototype.reportError = function() {
console.log(this.name + " says " + this.errorMessage);
};
Метод spillWater присва-
Robot.prototype.spillWater = function() {
ивает новое значение this.
errorMessage, что приво-
this.errorMessage = "I appear to have a short circuit!"; дит к переопределению
};
свойства в прототипе
для любого робота, вы-
зывающего этот метод.
var robby = new Robot("Robby", 1956, "Dr. Morbius");
var rosie = new Robot("Rosie", 1962, "George Jetson");
rosie.reportError();
robby.reportError();
Мы вызываем метод spillWater для
robby.spillWater();
объекта robby. Так Робби получает
rosie.reportError();
собственное свойство errorMessage,
которое переопределяет свойство
robby.reportError();
в прототипе.
console.log(robby.hasOwnProperty("errorMessage"));
true
console.log(rosie.hasOwnProperty("errorMessage"));
false
Но метод spillWater никогда не вызыва-
ется для Рози, поэтому она наследует
свойство от прототипа.
634
Развлечения с магнитами. Решение
Мы выложили на холодильнике очередную диаграмму объектов, и снова кто-то все перепутал.
Снова! Сможете ли вы расставить магниты по местам? Нам понадобится новая линейка косми-
ческих роботов, наследующих свойства от обычных роботов. Космические роботы переопре-
деляют метод speak обычных роботов, а также расширяют функциональность роботов новым
свойством homePlanet. Ниже приведено наше решение.
function speak() {
// code to speak
Прототип Robot
}
maker: "ObjectsRUs"
function
makeCoffee() {
speak()
// code 4 coffee
}
makeCoffee()
function
blinkLights()
blinklights() {
Прототип
-
// code 4 lights
}
SpaceRobot насле
-
дует (и расши
ряет) прототип
Robot. Мы добавили
в этот прототип
два метода — speak
-
и pilot, которые бу
Robot
дут наследоваться
Прототип SpaceRobot
function speak() {
всеми роботами.
name: "Robby"
// code to speak