当我写一个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}
这两种方法有什么区别?一个比另一个好吗?
答案 0 :(得分:0)
使用原型的第二种方法,如果你创建了大量的对象,效率要高得多,特别是如果你有大量的方法。
第一种方法要求每次调用new myClass()
时都创建所有方法函数。当您使用原型时,这些功能只需要创建一次。
第一种方法有一个优点:您可以将构造函数用作闭包,因此其方法可以访问构造函数中的局部变量。
作为旁注,您的构造函数名称应以大写字母开头,以遵循常规JavaScript约定。
答案 1 :(得分:0)
您实施的只是功能。它们可以用作构造对象的构造函数。调用构造函数时,会创建一个新对象,并将其Prototype
设置为构造函数的prototype属性,这意味着它与构造函数的原型共享属性。在第一种情况下,method1
和method2
是使用myClass
构造函数创建的每个对象的属性。如果这些方法在以这种方式创建的所有对象中是相同的,那么它就是一种内存浪费。如果将这些方法放入构造函数的原型中,则在调用构造函数时不会创建它们的新副本,但是创建的对象仍然可以使用原型链访问它们。所以它通常用于节省记忆。