beautify 1st part of the tutorial

This commit is contained in:
Ilya Kantor 2015-03-10 12:36:58 +03:00
parent e3dd2cedc0
commit 6444024a9d
327 changed files with 2358 additions and 1986 deletions

View file

@ -15,7 +15,7 @@ coffeeMachine.run(); // ошибка, кофеварка выключена!
```js
var coffeeMachine = new CoffeeMachine(10000);
coffeeMachine.enable();
coffeeMachine.enable();
coffeeMachine.run(); // ...Кофе готов!
```

View file

@ -14,16 +14,16 @@ function Fridge(power) {
if (food.length + arguments.length >= this._power / 100) {
throw new Error("Нельзя добавить, не хватает мощности");
}
for(var i=0; i<arguments.length; i++) {
food.push(arguments[i]); // добавить всё из arguments
for (var i = 0; i < arguments.length; i++) {
food.push(arguments[i]); // добавить всё из arguments
}
};
this.getFood = function() {
// копируем еду в новый массив, чтобы манипуляции с ним не меняли food
return food.slice();
return food.slice();
};
}
```

View file

@ -14,7 +14,7 @@
Код для проверки:
```js
var fridge = new Fridge(200);
var fridge = new Fridge(200);
fridge.addFood("котлета"); // ошибка, холодильник выключен
```
@ -22,9 +22,9 @@ fridge.addFood("котлета"); // ошибка, холодильник вык
```js
// создать холодильник мощностью 500 (не более 5 еды)
var fridge = new Fridge(500);
var fridge = new Fridge(500);
fridge.enable();
fridge.addFood("котлета");
fridge.addFood("котлета");
fridge.addFood("сок", "зелень");
fridge.addFood("варенье", "пирог", "торт"); // ошибка, слишком много еды
```
@ -32,18 +32,18 @@ fridge.addFood("варенье", "пирог", "торт"); // ошибка, с
Код использования холодильника без ошибок:
```js
var fridge = new Fridge(500);
var fridge = new Fridge(500);
fridge.enable();
fridge.addFood("котлета");
fridge.addFood("котлета");
fridge.addFood("сок", "варенье");
var fridgeFood = fridge.getFood();
alert(fridgeFood); // котлета, сок, варенье
alert( fridgeFood ); // котлета, сок, варенье
// добавление элементов не влияет на еду в холодильнике
fridgeFood.push("вилка", "ложка");
fridgeFood.push("вилка", "ложка");
alert(fridge.getFood()); // внутри по-прежнему: котлета, сок, варенье
alert( fridge.getFood() ); // внутри по-прежнему: котлета, сок, варенье
```
Исходный код класса `Machine`, от которого нужно наследовать:

View file

@ -30,15 +30,15 @@ function Fridge(power) {
if (food.length + arguments.length >= this._power / 100) {
throw new Error("Нельзя добавить, не хватает мощности");
}
for(var i=0; i<arguments.length; i++) {
food.push(arguments[i]); // добавить всё из arguments
for (var i = 0; i < arguments.length; i++) {
food.push(arguments[i]); // добавить всё из arguments
}
};
this.getFood = function() {
// копируем еду в новый массив, чтобы манипуляции с ним не меняли food
return food.slice();
return food.slice();
};
*!*
@ -53,25 +53,37 @@ function Fridge(power) {
*/!*
}
var fridge = new Fridge(500);
var fridge = new Fridge(500);
fridge.enable();
fridge.addFood({ title: "котлета", calories: 100 });
fridge.addFood({ title: "сок", calories: 30 });
fridge.addFood({ title: "зелень", calories: 10 });
fridge.addFood({ title: "варенье", calories: 150 });
fridge.addFood({
title: "котлета",
calories: 100
});
fridge.addFood({
title: "сок",
calories: 30
});
fridge.addFood({
title: "зелень",
calories: 10
});
fridge.addFood({
title: "варенье",
calories: 150
});
var dietItems = fridge.filterFood(function(item) {
return item.calories < 50;
});
fridge.removeFood("нет такой еды"); // без эффекта
alert(fridge.getFood().length); // 4
alert( fridge.getFood().length ); // 4
dietItems.forEach(function(item) {
alert(item.title); // сок, зелень
alert( item.title ); // сок, зелень
fridge.removeFood(item);
});
alert(fridge.getFood().length); // 2
alert( fridge.getFood().length ); // 2
```

View file

@ -11,26 +11,38 @@
Код для проверки:
```js
var fridge = new Fridge(500);
var fridge = new Fridge(500);
fridge.enable();
fridge.addFood({ title: "котлета", calories: 100 });
fridge.addFood({ title: "сок", calories: 30 });
fridge.addFood({ title: "зелень", calories: 10 });
fridge.addFood({ title: "варенье", calories: 150 });
fridge.addFood({
title: "котлета",
calories: 100
});
fridge.addFood({
title: "сок",
calories: 30
});
fridge.addFood({
title: "зелень",
calories: 10
});
fridge.addFood({
title: "варенье",
calories: 150
});
fridge.removeFood("нет такой еды"); // без эффекта
alert(fridge.getFood().length); // 4
alert( fridge.getFood().length ); // 4
var dietItems = fridge.filterFood(function(item) {
return item.calories < 50;
});
dietItems.forEach(function(item) {
alert(item.title); // сок, зелень
alert( item.title ); // сок, зелень
fridge.removeFood(item);
});
alert(fridge.getFood().length); // 2
alert( fridge.getFood().length ); // 2
```
В качестве исходного кода используйте решение [предыдущей задачи](/task/inherit-fridge).

View file

@ -29,15 +29,15 @@ function Fridge(power) {
if (food.length + arguments.length >= this._power / 100) {
throw new Error("Нельзя добавить, не хватает мощности");
}
for(var i=0; i<arguments.length; i++) {
food.push(arguments[i]); // добавить всё из arguments
for (var i = 0; i < arguments.length; i++) {
food.push(arguments[i]); // добавить всё из arguments
}
};
this.getFood = function() {
// копируем еду в новый массив, чтобы манипуляции с ним не меняли food
return food.slice();
return food.slice();
};
this.filterFood = function(filter) {
@ -60,7 +60,7 @@ function Fridge(power) {
*/!*
}
var fridge = new Fridge(500);
var fridge = new Fridge(500);
fridge.enable();
fridge.addFood("кус-кус");
fridge.disable(); // ошибка, в холодильнике есть еда

View file

@ -8,7 +8,7 @@
Код для проверки:
```js
var fridge = new Fridge(500);
var fridge = new Fridge(500);
fridge.enable();
fridge.addFood("кус-кус");
fridge.disable(); // ошибка, в холодильнике есть еда

View file

@ -105,7 +105,7 @@ function CoffeeMachine(power) {
*!*
// ошибка, переменная не определена!
alert(enabled);
alert( enabled );
*/!*
}
@ -140,7 +140,7 @@ function CoffeeMachine(power) {
this.enable();
*!*
alert(this._enabled); // true
alert( this._enabled ); // true
*/!*
}
@ -178,8 +178,8 @@ function CoffeeMachine(power) {
Machine.apply(this, arguments); // (2)
*/!*
alert(this._enabled); // false
alert(this._power); // 10000
alert( this._enabled ); // false
alert( this._power ); // 10000
}
var coffeeMachine = new CoffeeMachine(10000);
@ -204,8 +204,8 @@ var coffeeMachine = new CoffeeMachine(10000);
// которые в Machine не будут использованы
function Fridge(power, temperature) {
Machine.apply(this, arguments);
// ...
// ...
}
```
@ -216,11 +216,11 @@ function Fridge(power, temperature) {
```js
function CoffeeMachine(power, capacity) {
Machine.apply(this, arguments);
// переопределить this.enable
this.enable = function() {
/* enable для кофеварки */
};
// переопределить this.enable
this.enable = function() {
/* enable для кофеварки */
};
}
```
@ -234,10 +234,10 @@ function CoffeeMachine(power) {
*!*
var parentEnable = this.enable; // (1)
this.enable = function() { // (2)
parentEnable.call(this); // (3)
this.run(); // (4)
}
this.enable = function() { // (2)
parentEnable.call(this); // (3)
this.run(); // (4)
}
*/!*
...
@ -265,13 +265,13 @@ function Machine(power) {
this._enabled = false;
*!*
var self = this;
var self = this;
*/!*
this.enable = function() {
*!*
// используем внешнюю переменную вместо this
self._enabled = true;
self._enabled = true;
*/!*
};
@ -293,13 +293,13 @@ function CoffeeMachine(power) {
*!*
var parentEnable = this.enable;
this.enable = function() {
parentEnable(); // теперь можно вызывать как угодно, this не важен
this.run();
}
parentEnable(); // теперь можно вызывать как угодно, this не важен
this.run();
}
*/!*
function onReady() {
alert('Кофе готово!');
alert( 'Кофе готово!' );
}
this.run = function() {
@ -327,7 +327,7 @@ coffeeMachine.enable();
```js
function Machine(params) {
// локальные переменные и функции доступны только внутри Machine
var privateProperty;
var privateProperty;
// публичные доступны снаружи
this.publicProperty = ...;
@ -348,7 +348,7 @@ machine.public();
function CoffeeMachine(params) {
// универсальный вызов с передачей любых аргументов
*!*
Machine.apply(this, arguments);
Machine.apply(this, arguments);
*/!*
this.coffeePublicProperty = ...
@ -364,7 +364,7 @@ coffeeMachine.coffeePublicProperty();
```js
function CoffeeMachine(params) {
Machine.apply(this, arguments);
Machine.apply(this, arguments);
*!*
var parentProtected = this._protectedProperty;
@ -383,7 +383,7 @@ function Machine(params) {
var self = this;
this._protected = function() {
self.property = "value";
self.property = "value";
};
}
```