向类中添加方法与向类的原型中添加方法有什么优势?

What are advantages to adding methods to a class vs adding methods to a class's prototype?

本文关键字:添加 方法 什么 原型      更新时间:2023-09-26

当我写一个javascript类时,它通常是这样的:

var myClass = function(prop1, prop2) {
    this.prop1 = prop1;
    this.prop2 = prop2;
    this.method1 = function() {//blah}
    this.method2 = function() {//blahblah}
}

但是我读过的大多数书籍/教程都是这样描述写作课程的:

var myClass = function(prop1, prop2) {
    this.prop1 = prop1;
    this.prop2 = prop2;
}
myClass.prototype.method1 = function() {//blah}
myClass.prototype.method2 = function() {//blahblah}

这两种方法的区别是什么?一个比另一个好吗?

第二种方法是使用原型,如果您创建大量对象,特别是如果您有大量方法,则效率会高得多。

第一种方法需要在每次调用new myClass()时创建所有的方法函数。当你使用原型时,这些函数只需要创建一次。

第一种方法有一个优点:您可以将构造函数用作闭包,因此它的方法可以访问构造函数中的局部变量。

作为旁注,您的构造函数名称应该以大写字母开头,以遵循正常的JavaScript约定。

您实现的只是函数。它们可以用作创建对象的构造函数。当调用构造函数时,将创建一个新对象,并将其Prototype设置为构造函数的原型属性,这意味着它与构造函数的原型共享属性。在第一种情况下,method1method2是使用myClass构造函数创建的每个对象的属性。如果这些方法在以这种方式创建的所有对象中都是相同的,这是一种内存浪费。如果将这些方法放入构造函数的原型中,则在调用构造函数时不会创建它们的新副本,但创建的对象仍然可以使用原型链访问它们。一般是为了节省内存