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

@ -25,13 +25,13 @@
function User(name) {
this.sayHi = function() {
alert("Привет, я " + name);
alert( "Привет, я " + name );
};
}
var vasya = new User("Вася"); // создали пользователя
vasya.sayHi(); // пользователь умеет говорить "Привет"
vasya.sayHi(); // пользователь умеет говорить "Привет"
```
Здесь мы видим ярко выраженную сущность -- `User` (посетитель). Используя терминологию ООП, такие конструкторы часто называют *классами*, то есть можно сказать "класс `User`".

View file

@ -5,7 +5,7 @@
function CoffeeMachine(power) {
this.waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
var WATER_HEAT_CAPACITY = 4200;
*!*
var timerId;
*/!*
@ -16,7 +16,7 @@ function CoffeeMachine(power) {
}
function onReady() {
alert('Кофе готово!');
alert( 'Кофе готово!' );
}
this.run = function() {

View file

@ -8,7 +8,7 @@
function CoffeeMachine(power) {
this.waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
var WATER_HEAT_CAPACITY = 4200;
var self = this;
@ -17,7 +17,7 @@ function CoffeeMachine(power) {
}
function onReady() {
alert('Кофе готово!');
alert( 'Кофе готово!' );
}
this.run = function() {
@ -32,7 +32,7 @@ function CoffeeMachine(power) {
```js
var coffeeMachine = new CoffeeMachine(50000);
coffeeMachine.waterAmount = 200;
coffeeMachine.run();
coffeeMachine.stop(); // кофе приготовлен не будет
```

View file

@ -60,8 +60,8 @@
//+ run
function CoffeeMachine(power) {
this.waterAmount = 0; // количество воды в кофеварке
alert('Создана кофеварка мощностью: ' + power + ' ватт');
alert( 'Создана кофеварка мощностью: ' + power + ' ватт' );
}
// создать кофеварку
@ -107,10 +107,10 @@ function CoffeeMachine(power) {
function getBoilTime() {
return 1000; // точная формула расчета будет позже
}
// что делать по окончании процесса
function onReady() {
alert('Кофе готово!');
alert( 'Кофе готово!' );
}
this.run = function() {
@ -153,21 +153,21 @@ function CoffeeMachine(power) {
*!*
// физическая константа - удельная теплоёмкость воды для getBoilTime
var WATER_HEAT_CAPACITY = 4200;
var WATER_HEAT_CAPACITY = 4200;
// расчёт времени для кипячения
function getBoilTime() {
return this.waterAmount * WATER_HEAT_CAPACITY * 80 / power; // ошибка!
}
return this.waterAmount * WATER_HEAT_CAPACITY * 80 / power; // ошибка!
}
*/!*
// что делать по окончании процесса
function onReady() {
alert('Кофе готово!');
alert( 'Кофе готово!' );
}
this.run = function() {
setTimeout(onReady, getBoilTime());
setTimeout(onReady, getBoilTime());
};
}
@ -192,14 +192,14 @@ coffeeMachine.run();
//+ run
function CoffeeMachine(power) {
this.waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
var WATER_HEAT_CAPACITY = 4200;
function getBoilTime() {
return this.waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
function onReady() {
alert('Кофе готово!');
alert( 'Кофе готово!' );
}
this.run = function() {
@ -230,7 +230,7 @@ coffeeMachine.run();
function CoffeeMachine(power) {
this.waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
var WATER_HEAT_CAPACITY = 4200;
*!*
var getBoilTime = function() {
@ -239,7 +239,7 @@ function CoffeeMachine(power) {
*/!*
function onReady() {
alert('Кофе готово!');
alert( 'Кофе готово!' );
}
this.run = function() {
@ -269,18 +269,18 @@ coffeeMachine.run();
function CoffeeMachine(power) {
this.waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
var WATER_HEAT_CAPACITY = 4200;
*!*
var self = this;
function getBoilTime() {
return self.waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
return self.waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
*/!*
function onReady() {
alert('Кофе готово!');
alert( 'Кофе готово!' );
}
this.run = function() {

View file

@ -3,7 +3,7 @@
```js
//+ run
function User() {
var firstName, surName;
this.setFirstName = function(newFirstName) {

View file

@ -6,6 +6,7 @@ function CoffeeMachine(power, capacity) {
var waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
function getTimeToBoil() {
return waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
@ -28,7 +29,7 @@ function CoffeeMachine(power, capacity) {
*/!*
function onReady() {
alert('Кофе готов!');
alert( 'Кофе готов!' );
}
this.run = function() {

View file

@ -13,6 +13,7 @@ function CoffeeMachine(power, capacity) {
var waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
function getTimeToBoil() {
return waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
@ -29,7 +30,7 @@ function CoffeeMachine(power, capacity) {
};
function onReady() {
alert('Кофе готов!');
alert( 'Кофе готов!' );
}
this.run = function() {

View file

@ -6,6 +6,7 @@ function CoffeeMachine(power, capacity) {
var waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
function getTimeToBoil() {
return waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
@ -20,7 +21,7 @@ function CoffeeMachine(power, capacity) {
};
function onReady() {
alert('Кофе готов!');
alert( 'Кофе готов!' );
}
*!*
@ -31,7 +32,9 @@ function CoffeeMachine(power, capacity) {
this.run = function() {
*!*
setTimeout(function() { onReady(); }, getTimeToBoil());
setTimeout(function() {
onReady();
}, getTimeToBoil());
*/!*
};
@ -44,8 +47,8 @@ coffeeMachine.run();
*!*
coffeeMachine.setOnReady(function() {
var amount = coffeeMachine.getWaterAmount();
alert('Готов кофе: ' + amount + 'мл'); // Готов кофе: 150 мл
var amount = coffeeMachine.getWaterAmount();
alert( 'Готов кофе: ' + amount + 'мл' ); // Готов кофе: 150 мл
});
*/!*
```

View file

@ -11,6 +11,7 @@ function CoffeeMachine(power, capacity) {
var waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
function getTimeToBoil() {
return waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
@ -26,8 +27,8 @@ function CoffeeMachine(power, capacity) {
*!*
function onReady() {
alert('Кофе готов!');
}
alert( 'Кофе готов!' );
}
*/!*
this.run = function() {
@ -45,8 +46,8 @@ coffeeMachine.setWaterAmount(150);
*!*
coffeeMachine.setOnReady(function() {
var amount = coffeeMachine.getWaterAmount();
alert('Готов кофе: ' + amount + 'мл'); // Кофе готов: 150 мл
var amount = coffeeMachine.getWaterAmount();
alert( 'Готов кофе: ' + amount + 'мл' ); // Кофе готов: 150 мл
});
*/!*

View file

@ -14,6 +14,7 @@ function CoffeeMachine(power, capacity) {
*/!*
var WATER_HEAT_CAPACITY = 4200;
function getTimeToBoil() {
return waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
@ -28,7 +29,7 @@ function CoffeeMachine(power, capacity) {
};
function onReady() {
alert('Кофе готов!');
alert( 'Кофе готов!' );
}
this.setOnReady = function(newOnReady) {
@ -38,7 +39,7 @@ function CoffeeMachine(power, capacity) {
this.run = function() {
*!*
timerId = setTimeout(function() {
timerId = null;
timerId = null;
onReady();
}, getTimeToBoil());
};
@ -49,13 +50,13 @@ function CoffeeMachine(power, capacity) {
var coffeeMachine = new CoffeeMachine(20000, 500);
coffeeMachine.setWaterAmount(100);
alert('До: ' + coffeeMachine.isRunning()); // До: false
alert( 'До: ' + coffeeMachine.isRunning() ); // До: false
coffeeMachine.run();
alert('В процессе: ' + coffeeMachine.isRunning()); // В процессе: true
alert( 'В процессе: ' + coffeeMachine.isRunning() ); // В процессе: true
coffeeMachine.setOnReady(function() {
alert("После: " + coffeeMachine.isRunning()); // После: false
alert( "После: " + coffeeMachine.isRunning() ); // После: false
});
```

View file

@ -12,13 +12,13 @@
var coffeeMachine = new CoffeeMachine(20000, 500);
coffeeMachine.setWaterAmount(100);
alert('До: ' + coffeeMachine.isRunning()); // До: false
alert( 'До: ' + coffeeMachine.isRunning() ); // До: false
coffeeMachine.run();
alert('В процессе: ' + coffeeMachine.isRunning()); // В процессе: true
alert( 'В процессе: ' + coffeeMachine.isRunning() ); // В процессе: true
coffeeMachine.setOnReady(function() {
alert("После: " + coffeeMachine.isRunning()); // После: false
alert( "После: " + coffeeMachine.isRunning() ); // После: false
});
```

View file

@ -45,6 +45,7 @@ function CoffeeMachine(power, capacity) { // capacity - ёмкость кофе
var waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
function getTimeToBoil() {
return waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
@ -64,7 +65,7 @@ function CoffeeMachine(power, capacity) { // capacity - ёмкость кофе
*/!*
function onReady() {
alert('Кофе готов!');
alert( 'Кофе готов!' );
}
this.run = function() {
@ -106,7 +107,7 @@ function CoffeeMachine(power, capacity) {
}
var coffeeMachine = new CoffeeMachine(1000, 500);
coffeeMachine.setWaterAmount(450);
coffeeMachine.setWaterAmount(450);
alert( coffeeMachine.getWaterAmount() ); // 450
```
@ -146,7 +147,7 @@ var coffeeMachine = new CoffeeMachine(1000, 500);
// пример использования
*!*
coffeeMachine.waterAmount(450);
coffeeMachine.waterAmount(450);
alert( coffeeMachine.waterAmount() ); // 450
*/!*
```

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";
};
}
```