Heim  >  Fragen und Antworten  >  Hauptteil

javascript - Handelt es sich wieder um ein Prototypproblem?

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!

怪我咯怪我咯2684 Tage vor487

Antworte allen(3)Ich werde antworten

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-19 10:32:56

    在内存节约方面有差别

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

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

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

    Antwort
    0
  • 習慣沉默

    習慣沉默2017-05-19 10:32:56

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

    Antwort
    0
  • 習慣沉默

    習慣沉默2017-05-19 10:32:56

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

    Antwort
    0
  • StornierenAntwort