功能范围内的名称是否不被视为属性?

时间:2017-09-07 14:18:07

标签: 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" ]

为什么property& alert不被视为Foo的属性?

1 个答案:

答案 0 :(得分:4)

要在对象上创建属性,您必须显式引用该对象(与this.y = value;一样)或在原型链上继承它。

既然你没有那样做,那么它们就不是属性。它们是变量。

由于未使用var(或let或其他任何会限制范围的内容)声明,因此它们是全局变量。 (如果你使用strict mode(总是使用严格模式),那将是一个错误。