Задать вопрос
Muranx
@Muranx
кто понял this тот в цирке не смеётся

Почему в данном случае не создаются свойства объекта?

Здравствуйте!

$c = console;

function six(name,age){
  this.name = name;
  this.age = age;
  return {
    a: 10,
    b: 20
  };
};

var MAD = new six("Alex", 26); 

for(var k in MAD){
  $c.log(k + " : " + MAD[k]);  // a : 10 b : 20
};

$c.log(MAD.hasOwnProperty("a")); //true


Почему в данном примере свойства объектов name и age не создаются в объекте MAD? Ведь код функции "конструктора" выполняется (ну тоесть если вставить допустим в функцию после операций присваивания this.name = name например какой нибудь алерт, он же выполнится), но почему - то операция присваивания не срабатывает this.name = name, хотя по идее при вызове функции с new объект до знака равно (т.е. MAD) должен получить свойства. Это связанно с тем, что оператор return имеет больший приоритет чем операциИ присваивания в данном случае? Ну и если это так, то что происходит , точнее как действует интерпритатор, ведь он сначала при вызове new всё же выполняет код функции, но получается что присвоив объекту MAD свойства переданные аргументом, он их потом забывает после того как видит return? Или операции присваивания вообще не происходит в данном примере?
  • Вопрос задан
  • 212 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
like-a-boss
@like-a-boss
Признайся,тебяТянетНаКодМужика,ты—программный гей
Потому что вы ломаете функцию-конструктор, которая не должна ничего возвращать явно, потому что делает это неявно - возвращает this.

Дальнейшие вопросы исходя из вышесказанного не имеют смысла, но я всё равно отвечу:
- Свойства создаются. В этом легко убедиться.

Замечания:
- $c - следует забыть про доллары, доллары - удел библиотек.
- Функции-конструкторы именуются с большой литеры.
- Переменные в JS именуют в camelCase нотации, а не как в голову взбредёт.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
liqrizz
@liqrizz
лол
Классы пишутся с большой буквы, а у тебя она считается как функция
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы