提供委托方法作为包作者

时间:2016-12-29 23:01:20

标签: javascript

我正在开发一个应该由其他人使用的npm包。我决定该软件包应该提供的功能可以更轻松地处理我的包中定义的对象。特别是"委托"方法。

例如bark



function Dog(name) {
  this.name = name
}

Dog.prototype.bark = function bark() {
  return `${this.name}: Woof!`
}

function bark(dog) {
  return dog.bark()
}

// Example use of bark.
console.log(
  [ new Dog('Spike') ].map(bark)
)




但是我意识到也可以反过来实现它;将Dog.prototype.bark委托给bark



function Dog(name) {
  this.name = name
}

Dog.prototype.bark = function bark() {
  return bark(this) 
}

function bark(dog) {
  return `${dog.name}: Woof!`
}

// Example use of bark.
console.log(
  [ new Dog('Spike') ].map(bark)
)




我的问题是:包裹作者是否更喜欢一种风格而不是另一种风格?或者没有区别?

  

我希望有一个很好的理由选择一个而不是另一个,否则我们有另一种风格无休止地争论。

1 个答案:

答案 0 :(得分:0)

考虑您正在实施两个类DogWolf,这两个类都实现了接口Canidae,这意味着它们具有bark方法。

大多数情况下,您需要bark方法委派给Dog.prototype.barkWolf.prototype.bark方法,具体取决于您传递的对象。

// Dog class
function Dog(name) {
  this.name = name
}

Dog.prototype.bark = function bark() {
  return `${this.name}: Woof!`
}

// Wolf class
function Wolf(name) {
  this.name = name
}

Wolf.prototype.bark = function bark() {
  return `${this.name}: Woooooooooooooooh!`
}

// Delegating method
function bark(canidae) {
  return canidae.bark()
}

// Example use of bark.
console.log(
  [ new Dog('Spike'), new Wolf('Jack') ].map(bark)
)