Я имел в виду, в глобальном коде this = window. Соответственно ты пишешь var constructor = window.constructor и эта строчка не имеет никакого смысла.
this вообще имеет смысл только внутри функций использовать.
> Мне прописывать alert(имяЭлемента.constructor) каждый раз после создания нового элемента? После примера там написано, что такая строка ставит правильное значение prototype.constructor.
Во-первых, зачем нам alert когда есть console.log? Во-вторых, вот эта функция extend, которая там описывается, она делает одну вещь: настраивает цепочку прототипов чтобы у созданного объекта она выглядела так:
объект ->Child->Parent
(здесь Child — это класс унаcледованный от Parent c помощью описанной там функции extend).
Но способ, там используется, довольно-таки костыльный (мы создаем пустую функцию и меняем ее свойство prototype). В ES5 (который поддерживается новыми браузерами) есть более простой способ, это такой код:
Соответственно при использовании Object.create пляски с new F() не нужны.
> Мне в конструкторе каждого объекта это прописывать?
Да. Надо писать что-то вроде
function Child(){
Parent.call(this);
.....
}
> А, например, в конструкторе электросети один раз это прописать нельзя?
Нельзя, конечно. В JS так делается наследование — ты должен явно вызвать конструктор предка, иначе его никто не вызовет.
>return"Не покупать! Не хватит: "+ balance;
Ох, вот это не очень правильно, возвращать результат в человекочитаемой форме. Представь, что мы хотим использовать твой класс из другой программы и хотим там делать что-то в зависимости от того, хватит нам энергии или нет:
var result = electricNet.calcPrice();
if(????){
alert("Внимание! Не удалось закупить достаточно энергии!");
}
Что мы должны написать в if? Твое текстовое сообщение очень трудно использовать в программе. Лучше было бы вернуть данные в машинночитаемом виде:
return{
buy:100500,// куплено энергии на сумму
sell:0,// продано
isBalanced:true,// сведен ли баланс
extraEnergy:0,// сколько энергии не удалось продать
missingEnergy:0,// дефицит энергии
};
Соответственно такие данные мы легко можем проверить:
if(!result.isBalanced){
alert("!!!!");
}
>return powerline2 - powerline1;
Неправильно, нельзя вычитать объекты, надо писать что-то вроде powerline1.power - powerlin2.power;
>>393107
>>var constructor = this.constructor;
>Что это за ерунда?
Я имел в виду, в глобальном коде this = window. Соответственно ты пишешь var constructor = window.constructor и эта строчка не имеет никакого смысла.
this вообще имеет смысл только внутри функций использовать.
> Мне прописывать alert(имяЭлемента.constructor) каждый раз после создания нового элемента? После примера там написано, что такая строка ставит правильное значение prototype.constructor.
Во-первых, зачем нам alert когда есть console.log? Во-вторых, вот эта функция extend, которая там описывается, она делает одну вещь: настраивает цепочку прототипов чтобы у созданного объекта она выглядела так:
объект -> Child -> Parent
(здесь Child — это класс унаcледованный от Parent c помощью описанной там функции extend).
Но способ, там используется, довольно-таки костыльный (мы создаем пустую функцию и меняем ее свойство prototype). В ES5 (который поддерживается новыми браузерами) есть более простой способ, это такой код:
Child.prototype = Object.create(Parent.prototype);
Соответственно при использовании Object.create пляски с new F() не нужны.
> Мне в конструкторе каждого объекта это прописывать?
Да. Надо писать что-то вроде
function Child() {
Parent.call(this);
.....
}
> А, например, в конструкторе электросети один раз это прописать нельзя?
Нельзя, конечно. В JS так делается наследование — ты должен явно вызвать конструктор предка, иначе его никто не вызовет.
> return "Не покупать! Не хватит: " + balance;
Ох, вот это не очень правильно, возвращать результат в человекочитаемой форме. Представь, что мы хотим использовать твой класс из другой программы и хотим там делать что-то в зависимости от того, хватит нам энергии или нет:
var result = electricNet.calcPrice();
if (????) {
alert("Внимание! Не удалось закупить достаточно энергии!");
}
Что мы должны написать в if? Твое текстовое сообщение очень трудно использовать в программе. Лучше было бы вернуть данные в машинночитаемом виде:
return {
buy: 100500, // куплено энергии на сумму
sell: 0, // продано
isBalanced: true, // сведен ли баланс
extraEnergy: 0, // сколько энергии не удалось продать
missingEnergy: 0, // дефицит энергии
};
Соответственно такие данные мы легко можем проверить:
if (!result.isBalanced) {
alert("!!!!");
}
> return powerline2 - powerline1;
Неправильно, нельзя вычитать объекты, надо писать что-то вроде powerline1.power - powerlin2.power;