javascript - 函数作用域中的名称不被视为属性吗?

标签 javascript

对于下面的代码,

function Foo(value) {
  property = value
  alert('Hello ' + value);
  this.y = value;
}

Foo.prototype.x = 10;

Foo.prototype.calculate = function (input) {
  console.log('calculated value: ' + input*2);
}

b = new Foo(20);
c = new Foo(30);

以下是我的理解,

enter image description here

但是,我期望名称 property 和名称 alert 作为属性,是 Foo 的一部分,与下面所示不同,

> Object.getOwnPropertyNames(Foo)
Array [ "prototype", "length", "name" ]

为什么 propertyalert 不被视为 Foo 的属性?

最佳答案

要在对象上创建属性,您必须显式引用该对象(就像使用 this.y = value; 所做的那样)或在原型(prototype)链上继承它。

由于您没有这样做,因此它们不是属性。它们是变量。

由于没有用var(或let,或任何其他会限制范围的东西)声明,它们是全局变量。 (如果您使用 strict mode (始终使用严格模式),则会出现错误)。

关于javascript - 函数作用域中的名称不被视为属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46098720/

相关文章:

javascript - 是否可以使用 javascript 扩展手写笔?

javascript - 如何在 Angular 7 中剪切每个数字处的字符串并创建一个新行?

javascript - 如何将切换按钮集成到 Bootstrap 3.3.7?

javascript - ES6 类扩展了 Socket IO

javascript - 发生错误时显示的警报框

javascript - knockout foreach 与自变量的绑定(bind)

javascript - 如何从模板节点复制并填充 json 数据并使用 javascript 将它们附加到文档中?

javascript - AJAX:通过 src 加载视频的 JWT 身份验证

javascript - chrome-extension inject.js 的目的是什么

javascript - SmartAdmin 模板页面功能运行两次 Bug