我的理解是原型链上的东西每个对象只创建一次,并且要创建实例变量,必须使用this
. 这个对吗?
例如:
function Foo () {
this.some_instance = "hello";
}
Foo.prototype.some_static = "hi";
执行
var foo1 = new Foo();
var foo2 = new Foo();
创建 foo1 和 foo2 将创建两个 hello 值,但只有一个 hi。
这个对吗?
我的理解是原型链上的东西每个对象只创建一次,并且要创建实例变量,必须使用this
. 这个对吗?
例如:
function Foo () {
this.some_instance = "hello";
}
Foo.prototype.some_static = "hi";
执行
var foo1 = new Foo();
var foo2 = new Foo();
创建 foo1 和 foo2 将创建两个 hello 值,但只有一个 hi。
这个对吗?
简短的回答:是的。
证明:
function Foo () {
this.some_instance = "hello";
}
var foo1 = new Foo();
Foo.prototype.some_static = "hi"; // in between
var foo2 = new Foo();
foo1.some_static === foo2.some_static; // return true
好吧,创建 foo1 和 foo2 不会创建任何“hi”值。在创建 foo1 和 foo2 之前,已经在 Foo 原型对象中创建了值为“hi”的“some_static”变量。
当您创建使用 Foo 原型的对象并引用它们的“some_static”属性时,它将首先查看对象本身。如果对象没有“some_static”属性,它将在其原型对象中查找它。
但是,是的,如果您想为使用相同原型的每个对象创建一个唯一的属性,您应该在对象本身上设置它,而不是在原型上。您可以通过从对象方法之一内部设置“this.some_instance”或从外部设置“foo1.some_instance”来做到这一点。