Heim > Fragen und Antworten > Hauptteil
Ich verstehe nicht, was der wesentliche Unterschied zwischen den folgenden beiden Schreibweisen ist?
function Person() {
}
Person.prototype.age = function(n) {
return n;
}
var person = new Person();
person.age(9);
Die obige Schreibmethode verwendet den Prototyp, um dem instanziierten Objekt den Aufruf der Funktion der übergeordneten Klasse zu ermöglichen.
Die folgende Methode besteht den Prototyp nicht, ist aber in der Verwendung genau gleich.
function Person() {
this.age = function(n) {
return n;
}
}
var person = new Person();
person.age(9);
In welchen Aspekten sind die beiden also vergleichbar? Bitte um Rat, danke!
过去多啦不再A梦2017-05-19 10:32:56
在内存节约方面有差别
第一种方式,prototye定义,所有后代都共享一个方法定义,内存中只有占一个空间,无论你创建了多少实例,所有实例的age方法都指向这个内存地址。
第二种方式,在构造函数内定义,每创建一个实例,age方法的定义就会分配一个空间,属于该实例专用。实例创建多了,内存成比例增长。
综上,如果是共有的方法,请放到prototype中。
習慣沉默2017-05-19 10:32:56
第二种写法是构造函数模式,用是好用,但是这种方法的主要问题是每个方法都要在在每个实例上重新创建一遍。
第一种原型模式方法就解决了这个问题,让所有对象实例共享它所包含的属性和方法。