Javascript链方法

时间:2016-07-08 14:20:29

标签: javascript

我正在尝试实现链式方法,但我无法做到。

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

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

3 个答案:

答案 0 :(得分:1)

在你的小提琴中,你的运行时异常是由PersonApi中的函数引起的,而不是返回PersonApi对象本身,而是它包含的Person对象。

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

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

这应该产生预期的结果。

答案 1 :(得分:0)

person.walk().jump().run().kneelDown(); 
当且仅当,才能链接

    person.walk() 返回一个对象/函数,其中包含jump()函数。 类似地,person.walk()。jump()只有在它内部返回run()对象时才能被链接,依此类推。

否则,按照@Satchmo Sanders

的建议,上述方法是正确的

答案 2 :(得分:-1)

您必须单独调用这些函数:

var person = new PersonApi();
function doAll() {
   //put this function wherever and name it whatever
   person.walk()
   person.jump()
   person.run()
   person.kneelDown();
}
doAll();

我希望这就是你想要的。