对于下面的代码,
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);
以下是我的理解,
但是,我期望名称 property
和名称 alert
作为属性,是 Foo
的一部分,与下面所示不同,
> Object.getOwnPropertyNames(Foo)
Array [ "prototype", "length", "name" ]
为什么 property
和 alert
不被视为 Foo
的属性?
最佳答案
要在对象上创建属性,您必须显式引用该对象(就像使用 this.y = value;
所做的那样)或在原型(prototype)链上继承它。
由于您没有这样做,因此它们不是属性。它们是变量。
由于没有用var
(或let
,或任何其他会限制范围的东西)声明,它们是全局变量。 (如果您使用 strict mode (始终使用严格模式),则会出现错误)。
关于javascript - 函数作用域中的名称不被视为属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46098720/