3

当我编写一个 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}

这两种方法有什么区别?这个比那个好吗?

4

2 回答 2

0

使用原型的第二种方法在创建大量对象时效率更高,尤其是在您拥有大量方法的情况下。

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

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

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

于 2013-03-08T20:44:42.810 回答
0

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

于 2013-03-08T20:45:45.413 回答