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

Javascript 创建构造函数后使用原型有什么好处?,javascript,performance,javascript-objects,Javascript,Performance,Javascript Objects,如果你有一个构造函数,比如 var SomeClass = function(){ this.a= ""; this.b= ""; } 然后假设您使用prototype添加了另一个方法 SomeClass.prototype.fn = function fn(){ console.log(this.a); }; 为什么要使用prototype,您可以将此方法添加到构造函数中 功能 因为现在如果创建1000个对象,它们将共享相同的字段,并反复重复:{a:,b:,fn:

如果你有一个构造函数,比如

var SomeClass = function(){
    this.a= "";
    this.b= "";
}
然后假设您使用prototype添加了另一个方法

SomeClass.prototype.fn = function fn(){
    console.log(this.a);
 };
为什么要使用
prototype
,您可以将此方法添加到构造函数中 功能

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


这会消耗内存,是一种糟糕的做法。当您将
fn
委托给
class.prototype
时,代码不会重复,对象“更轻”:
{a:,b::}
,但它们仍然可以使用
fn
方法。

有一些好处:

  • 它创建一个
    fn
    函数,由使用该构造函数创建的所有对象重用;这比在每个对象上使用单独的函数更节省内存

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

  • 只有一个函数,所有相关对象都可以重用,这意味着您可以在运行时在一个地方更新该函数,并让所有相关对象(即使是已经存在的对象)使用更新后的函数

  • 在构造函数的
    prototype
    属性上可用意味着它可以用于其他对象,而不是通过构造函数创建的对象;这通常会产生良好的效果,例如:

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

  • 因为当你用new关键字从函数中创建一个对象时

    tesObject= new Class();
    
    每次都要在每个对象中重新创建函数


    因此,它使用了更多的内存和更少的共振。

    可能重复我更新了你的问题,以消除语法错误(并遵循正常的JavaScript命名标准;构造函数最初按约定大写)
    class
    是一个关键字,您不能将其用作变量名。谢谢,这是为了解释。Ad 3:但是如果该方法在构造函数中,那么您也只能在一个地方更新它,对吗?@Adrianwymanski:对不起,我不清楚。您正在考虑修改源代码。我说的是在运行时动态更改结构,这是JavaScript的一个更强大的方面。
    tesObject= new Class();