创建构造函数后使用原型有什么好处?

what is the benefit of using prototype after creating constructor function?

如果你有像

这样的构造函数
var SomeClass = function(){
    this.a= "";
    this.b= "";
}

然后假设您使用原型添加另一个方法

SomeClass.prototype.fn = function fn(){
    console.log(this.a);
 };

为什么要使用 prototype,您只需将此方法添加到您的构造函数中 功能?

var myClass = function(){
    this.a = "";
    this.b = "";
    this.fn = function(){
        console.log(this.a);
    }
};

因为现在如果您创建 1000 个对象,它们将共享相同的字段并一遍又一遍地重复:{ a: "", b: "", fn: myClass/this.fn() }

这很耗费内存,是一种不好的做法。当你将fn委托给class.prototype时,代码不再重复,对象为"lighter":{ a: "", b: "" },但仍然可以使用fn方法。

有几个好处:

  1. 它创建了一个 fn函数,被所有用该构造函数创建的对象重用;这比每个对象上的单独函数更节省内存。

  2. 让对象对其原型保持动态 link 意味着当您向原型添加方法时,它们可用于 已经存在的对象.

  3. 只有一个函数所有相关对象重用意味着您可以 更新 该函数,如果需要在运行时,在只有一个地方,并让所有相关对象使用更新的功能,甚至是已经存在的对象。

  4. 在构造函数的 prototype 属性 上可用意味着它可以用于 other 对象,而不是通过构造函数创建;这个经常使用效果不错,比如:

    Array.prototype.forEach.call(
        document.querySelectorAll("div"),
        function(div) {
            // ...
        }
    );
    

因为当您使用 new 关键字从函数创建对象时

tesObject= new Class();

你每次都在每个对象中重新创建函数。

所以它使用更多的内存和更少的性能。