如何反复调用相同的函数?

时间:2015-08-18 18:50:39

标签: javascript function

我想调用一个函数两次但不是通过传统的方式。我将要做的一个简单示例如下:

    var myfunc = {
        copy: function(message){
            console.log(message);
        }
    }

    myfunc.copy('hello').copy('world');

    // result 'hello'
    // result 'world'

这甚至可能吗?

6 个答案:

答案 0 :(得分:3)

是的,但你应该返回正确的对象:

var myfunc = {
    copy: function(message){
        console.log(message);
        return this;
    }
};
myfunc.copy('hello').copy('world'); 
// hello
// world

此技术也称为Method chaining

答案 1 :(得分:1)

不会,这会失败,因为.copy()不会返回任何内容,所以第二个.copy()会抛出一个未定义的错误。

试试这个:

var myfunc = {
    copy: function(message){
        console.log(message); 
        return this;
    }
}

答案 2 :(得分:0)

它被称为方法链。这是一个关于此的博客,您应该能够阅读并使用它来回答您的问题。

基本上你需要使用return this;来返回当前对象,以便下一个方法可以使用它。

// define the class
var Kitten = function() {
  this.name = 'Garfield';
  this.color = 'brown';
  this.gender = 'male';
};

Kitten.prototype.setName = function(name) {
  this.name = name;
  return this;
};

Wordpress docs

答案 3 :(得分:0)

你需要链接这个,你也可以查看jquerys $ .fn他们如何创建方法链接简单地返回它,因为这个对象是你的myFunc变量并且被下一个函数再次使用

var myfunc = {
   copy: function(message){
       console.log(message);
       return this; 
   }
};
myfunc.copy('hello').copy('world');

答案 4 :(得分:0)

正如其他答案所指出的那样,您需要返回this才能在同一对象上调用相同或附加的函数。

您可以通过我们称之为“chainify”的高阶函数更轻松地执行此操作(?),该函数负责为您返回this

function chainify(fn) {
  return function() {
    fn.apply(this, arguments);
    return this;
  };
}

您可以通过各种方式对对象方法进行链式化,但这里只有一个:

var myfunc = {
  init: function() {
    this.copy = chainify(this.copy);
    return this;
  },

  copy: function(message){
      console.log(message);
  }
}.init();

这有一个小优势,即每个方法都不需要在最后使用return this混乱,并且您不会冒被遗忘的风险。

答案 5 :(得分:0)

这是一种已知的Builder设计模式,其中包含级联方法。谷歌如果它有帮助。