Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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 - Fatal编程技术网

Javascript链方法

Javascript链方法,javascript,Javascript,我试图实现一个链式方法,但我不能做到这一点 function Person(name){ this.name = name; }; Person.prototype.walk = function walk(callback) { //callback() }; var person = new Person(); person.walk().walk().walk().walk(); 您必须单独调用函数,如下所示: var person = new PersonApi();

我试图实现一个链式方法,但我不能做到这一点

function Person(name){
    this.name = name;
};
Person.prototype.walk = function walk(callback) {
   //callback()
};

var person = new Person();
person.walk().walk().walk().walk();

您必须单独调用函数,如下所示:

var person = new PersonApi();
function doAll() {
   //put this function wherever and name it whatever
   person.walk()
   person.jump()
   person.run()
   person.kneelDown();
}
doAll();
我希望这就是你想要的

person.walk().jump().run().kneelDown(); 
当且仅当 person.walk() 返回包含jump()函数的对象/函数。 类似地,person.walk().jump()只有在返回其中的run()对象时才能被链接,以此类推


否则,上述方法是正确的,正如@Satchmo Sanders在您的fiddle中所建议的那样,您的运行时异常是由您的PersonApi中的函数导致的,这些函数没有返回PersonApi对象本身,而是返回其包含的Person对象

在对walk()的第一次调用中,这将很好,因为walk()将返回一个具有“jump”方法的person对象。但是,person对象的“jump”函数返回未定义的,这就是为什么链中的下一个调用将产生错误的原因。更改所有API函数以返回“this”而不是“this.person”:

    PersonApi.prototype.jump = function(){
      this.person.jump();
      return this;
    };

这将产生预期的结果。

请在问题中直接提供具体细节。使用setTimeout添加延迟是一种不好的做法。你应该调查一下“承诺”我已经修改了这个问题..你说的“锁链”是什么意思?没错!谢谢,但是现在,我如何确保调用的顺序与我调用它们的顺序完全一致呢?除非您正在执行异步操作(如本例中的setTimeout),否则它们应该按照与您调用它们相同的顺序执行。如果您想像您所描述的那样使用异步,您可能应该将API更改为使用承诺。像这样的