类构造函数与原型中的方法

给定一个类,有两种常用的方法来定义它的方法。

在类构造函数中定义方法

function Calculator() {
  this.sum = function (a, b) {
    return a + b
  }
}

或在类原型中定义方法:

function Calculator() {}

Calculator.prototype.sum = function (a, b) {
  return a + b
}

当类实例调用该方法时,这两种方法都会产生相同的结果:

const calc = new Calculator()
calc.sum(1, 2) // 3

区别

  • 在第一种方法中,每次创建类的新实例时都必须创建该方法。另一方面,第二种方法创建一次方法,并为类的所有实例共享该方法。也就是说,第二种方法比第一种更有效,需要的内存更少。

  • 通过 prototype 创建的方法可以被子类扩展和重写。

建议

第一种方法可以创建一个由其他函数的逻辑组成的巨大构造函数。

考虑下面的巨大构造函数:

function Foo() {
  this.bigFunction = function () {
    // 这里有一个很大的功能
  }

  this.anotherBigFunction = function () {
    // ...
  }
}

对比:

function Foo() {}

Foo.prototype.bigFunction = function() {
  // ...
}

Foo.prototype.anotherBigFunction = function() {
  // ...
}

后者看起来更具可读性和方便性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值