javascript - Handelt es sich wieder um ein Prototypproblem?
怪我咯
怪我咯 2017-05-19 10:30:56
0
3
482

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!

怪我咯
怪我咯

走同样的路,发现不同的人生

Antworte allen(3)
过去多啦不再A梦

在内存节约方面有差别

  • 第一种方式,prototye定义,所有后代都共享一个方法定义,内存中只有占一个空间,无论你创建了多少实例,所有实例的age方法都指向这个内存地址。

  • 第二种方式,在构造函数内定义,每创建一个实例,age方法的定义就会分配一个空间,属于该实例专用。实例创建多了,内存成比例增长。

综上,如果是共有的方法,请放到prototype中。

習慣沉默

第二种写法是构造函数模式,用是好用,但是这种方法的主要问题是每个方法都要在在每个实例上重新创建一遍。
第一种原型模式方法就解决了这个问题,让所有对象实例共享它所包含的属性和方法。

習慣沉默

简单来说,功能一样,只不过大多数情况下会把方法写在原型中,把属性写在构造函数中,所以第一种方法更常用

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!