Почему переменная объявлена внутри класса JS "undefined" [дубликат]



На этот вопрос уже есть ответ здесь:



Попытка создать класс в JS с атрибутивным весом в следующем коде:



function Foo() {
var weight = 10;
console.log(weight);
}


Когда я создаю его с помощью var bar = new Foo();, 10 регистрируется на консоли.



Когда я позже позвоню console.log(bar.weight);, undefined есть вошел в консоль. Почему это так? У меня создалось впечатление, что атрибуты, объявленные в классе JS, по умолчанию являются общедоступными?

535   2  

2 ответов:

Это потому, что вы на самом деле не задали weight как свойство bar; это просто локальная переменная, созданная при вызове конструктора (это отличается от некоторых других языков, таких как Java, например). Чтобы создать его как свойство, необходимо использовать ключевое слово this:

function Foo() {
    this.weight = 10;
}

, который устанавливает weight быть свойством Foo объектов, в том числе bar, так что вы должны быть в состоянии использовать console.log(bar.weight) без проблем.

function Foo() {
  this.weight = 10;
}

var bar = new Foo();

document.body.innerHTML = "<code>bar</code>'s weight property is equal to " + bar.weight + ".";

Поскольку вес-это не свойство пищи, а локальная переменная, изменение

var weight = 10;

К

this.weight = 10;

Comments

    Ничего не найдено.