向类添加方法与向类的原型添加方法有什么好处?

时间:2013-03-08 20:35:05

标签: javascript

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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