如何将函数链接成一个句子

时间:2017-04-16 18:49:00

标签: javascript html

所以我必须编写一个程序,它可以链接这样的函数: 名字("亚当")。地方("电影")。电影(" xxx")预期输出应该是这样的:亚当去看电影看电影叫xxx,到目前为止我所拥有的:

    var test = function(name){

        var self = {};
        console.log(name)

        function someFunc(where) {
            console.log("goes to cinema" + where)
            return self;
        }

        function someOtherFunc(what) {
            console.log("to watch movie" + what)
            return self;
        }   

        self.someFunc = someFunc;
        self.someOtherFunc = someOtherFunc;
        return self;

    }
 console.log(test("Adam").someFunc("cinema").someOtherFunc("xxx"));

但它给了我不同的字符串,我想用一句话来表达,任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

假设您需要按照该顺序执行功能,并生成一个不按顺序变化的句子,您可以执行以下操作:

var test = function(name){
  var self = {
    message: name,
  };

  function someFunc(where) {
      self.message += " goes to cinema" + where;
      return self;
  }

  function someOtherFunc(what) {
      self.message += " to watch movie" + what;
      console.log(self.message);
  }   

  self.someFunc = someFunc;
  self.someOtherFunc = someOtherFunc;
  return self;
}

console.log(test("Adam").someFunc("cinema").someOtherFunc("xxx"));

答案 1 :(得分:1)

您可以这样做:

var test = function(message) {

  this.someFunc = function(where) {
    message += ` goes to ${where}`;
    return this; // Allow chaining
  }

  this.someOtherFunc = function(what) {
    message += ` to watch movie ${what}`;
    return this; // Allow chaining
  }

  this.value = function() {
    return message; //End chain
  }

  return this; // Start chain

}
console.log(test("Adam").someFunc("cinema").someOtherFunc("xxx").value());
//Adam goes to cinema to watch movie xxx

编辑:

是否可以在没有.value()的情况下获得该结果?

您可以覆盖.toString()

  

每个对象都有一个自动调用的toString()方法   该对象将表示为文本值或对象是   以预期字符串的方式引用。默认情况下   toString()方法由来自Object的每个对象继承。   如果在自定义对象中未覆盖此方法,则toString()   返回“[object type]”,其中type是对象类型。

这需要将对象转换为字符串。

var test = function(message) {

  this.someFunc = function(where) {
    message += ` goes to ${where}`;
    return this;
  }

  this.someOtherFunc = function(what) {
    message += ` to watch movie ${what}`;
    return this;
  }

  this.toString = function() {
    return message;
  }

  return this;

}

console.log(`${ test("Adam").someFunc("cinema").someOtherFunc("xxx")}`);