Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何构造一个javascript类以同时使用多个子方法?_Javascript_Node.js_Class_Oop_Object - Fatal编程技术网

如何构造一个javascript类以同时使用多个子方法?

如何构造一个javascript类以同时使用多个子方法?,javascript,node.js,class,oop,object,Javascript,Node.js,Class,Oop,Object,假设我有三门课: function Basket() { this.catches = [] } Basket.prototype.addCatch = function(catch) { catches.push(catch) } function Pole() { } Pole.prototype.catchFish = function() { return "fish" } function Fisherman() { this.pole = new

假设我有三门课:

function Basket() {
   this.catches = []
}

Basket.prototype.addCatch = function(catch) {
   catches.push(catch)
}


function Pole() {
}

Pole.prototype.catchFish = function() {
   return "fish"
} 


function Fisherman() {
   this.pole = new Pole()
   this.basket = new Basket()
}
现在,当我创建一个
渔夫
时,我可以钓到一条鱼并把它放进篮子里

现在我想在一个电话里同时做这两件事。我现在实施它的方式如下:

function Fisherman() {
   this.pole = new Pole()
   this.basket = new Basket()

   this.utils = {}
   this.utils.catchAndStore = function() {
      let { pole, basket } = this
      basket.addCatch(pole.catchFish())
   }.bind(this)
}
我似乎在工作,但感觉不太对劲。为了实现这一目标,组织班级的好方法是什么?或者这种复杂性应该从这门课中释放出来吗?

就像这样:

Fisherman.prototype.catchFish = function () {
    if (!this.basket.addCatch || !this.pole.catchFish)
        return console.log("Hey!I need correct tools!");
    this.basket.addCatch(this.pole.catchFish());
}
就这样,

Fisherman.prototype.catchFish = function () {
    if (!this.basket.addCatch || !this.pole.catchFish)
        return console.log("Hey!I need correct tools!");
    this.basket.addCatch(this.pole.catchFish());
}

“两个电话都在一个电话里”是什么意思?正如您的代码所示,在“一次调用”中无法真正做到这一点,因为JavaScript引擎是单线程、运行到完成的beast。不管你会创造什么样的“把戏”——它都是上面的某种变体——就像你在其他类中使用方法一样,将函数放在Fisherman.prototype.catchAndStore上。另外,验证你不能使用类……@Bergi我不想污染这个名称空间,这就是为什么我想把那些助手放在他们自己的房间里object@ThibautSchaeffer这里没有污染,捕鱼和储存鱼类是渔民的工作。不,当你把代码放在另一个对象上时,代码不起作用,请参阅我的链接。如果您坚持,请使用命名约定,例如
Fisherman.prototype.util\u catchAndStore
。这“一次调用两个”是什么意思?正如您的代码所示,在“一次调用”中无法真正做到这一点,因为JavaScript引擎是单线程、运行到完成的beast。不管你会创造什么样的“把戏”——它都是上面的某种变体——就像你在其他类中使用方法一样,将函数放在Fisherman.prototype.catchAndStore上。另外,验证你不能使用类……@Bergi我不想污染这个名称空间,这就是为什么我想把那些助手放在他们自己的房间里object@ThibautSchaeffer这里没有污染,捕鱼和储存鱼类是渔民的工作。不,当你把代码放在另一个对象上时,代码不起作用,请参阅我的链接。如果您坚持,请使用命名约定,例如
Fisherman.prototype.util\u catchAndStore