0

我的理解是原型链上的东西每个对象只创建一次,并且要创建实例变量,必须使用this. 这个对吗?

例如:

function Foo () {
    this.some_instance = "hello";
}
Foo.prototype.some_static = "hi";

执行

var foo1 = new Foo();

var foo2 = new Foo(); 

创建 foo1 和 foo2 将创建两个 hello 值,但只有一个 hi。

这个对吗?

4

2 回答 2

3

简短的回答:是的。

证明:

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
于 2013-11-03T01:29:50.760 回答
2

好吧,创建 foo1 和 foo2 不会创建任何“hi”值。在创建 foo1 和 foo2 之前,已经在 Foo 原型对象中创建了值为“hi”的“some_static”变量。

当您创建使用 Foo 原型的对象并引用它们的“some_static”属性时,它将首先查看对象本身。如果对象没有“some_static”属性,它将在其原型对象中查找它。

但是,是的,如果您想为使用相同原型的每个对象创建一个唯一的属性,您应该在对象本身上设置它,而不是在原型上。您可以通过从对象方法之一内部设置“this.some_instance”或从外部设置“foo1.some_instance”来做到这一点。

于 2013-11-03T01:31:04.300 回答