Почему переменная объявлена внутри класса JS "undefined" [дубликат]
На этот вопрос уже есть ответ здесь:
Попытка создать класс в JS с атрибутивным весом в следующем коде:
function Foo() {
var weight = 10;
console.log(weight);
}
Когда я создаю его с помощью var bar = new Foo();, 10 регистрируется на консоли.
Когда я позже позвоню console.log(bar.weight);, undefined есть вошел в консоль. Почему это так? У меня создалось впечатление, что атрибуты, объявленные в классе JS, по умолчанию являются общедоступными?
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