对于以下代码,
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
的属性?
答案 0 :(得分:4)
要在对象上创建属性,您必须显式引用该对象(与this.y = value;
一样)或在原型链上继承它。
既然你没有那样做,那么它们就不是属性。它们是变量。
由于未使用var
(或let
或其他任何会限制范围的内容)声明,因此它们是全局变量。 (如果你使用strict mode(总是使用严格模式),那将是一个错误。