向类中添加方法与向类的原型中添加方法有什么优势?
What are advantages to adding methods to a class vs adding methods to a class's prototype?
当我写一个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
设置为构造函数的原型属性,这意味着它与构造函数的原型共享属性。在第一种情况下,method1
和method2
是使用myClass
构造函数创建的每个对象的属性。如果这些方法在以这种方式创建的所有对象中都是相同的,这是一种内存浪费。如果将这些方法放入构造函数的原型中,则在调用构造函数时不会创建它们的新副本,但创建的对象仍然可以使用原型链访问它们。一般是为了节省内存
相关文章:
- 在对象中添加方法时出现问题
- 什么意思是“;向原型添加方法”;
- jQuery验证器添加方法未定义
- 向通过ReST JSON调用生成的Angular Javascript对象添加方法
- 向React中的高阶组件添加方法
- 向JavaScript对象添加方法
- 如何向[]添加方法
- 如何在流星js中为对象添加方法
- jQuery.validation 在生日年龄验证中添加方法错误
- 使用 IE8 添加方法的 JavaScript 错误
- 向方法添加方法
- 如何在 Javascript ES6 中向类添加方法
- Javascript:向对象类添加方法的优缺点是什么
- 如何更改“动物”的原型并添加方法“sayName”来打印语句
- 如何在 Illustrator CS5.1+ 中创建画板对象的添加方法所需的矩形对象
- 如何在 nodejs 中全局添加方法到 JSON、Date 或其他“本机”对象
- 什么类/类型是未定义的,是否可以向其扩展/添加方法
- 为什么在 javascript 中向数组原型添加方法会破坏 for 循环上的迭代
- 向对象添加方法
- 动态添加方法到对象