无限函数调用,例如“ string” .replace()。replace()

时间:2018-10-16 18:27:45

标签: javascript

我不太确定如何解释,因此我将从输出开始。 我需要退货:

{
   replies:
   [
      { type: 'text', content: 'one' }
      { type: 'text', content: 'two' }
      { type: 'text', content: 'three' }
   ],
   conversation: {
      memory
   }
}

我想通过内联语句将其返回。 所以我想打电话给类似的人

reply.addText('one').addText('two').addText('three').addConversation(memory)

请注意,可以无限次调用addText,而只能一次调用addConversation。另外,对话是可选的,在这种情况下,如果没有对话,则对话对象不应出现在输出中。

3 个答案:

答案 0 :(得分:1)

要使用构造器创建自定义结构化对象,请说Reply

要在方法调用的返回值上调用实例方法,请从该方法返回实例对象。

防止多次添加对话对象的选择包括引发错误(如下所示)或记录警告,并且在第一次调用addConversation之后根本不添加其他对象。

编写代码以实现要求。

例如使用香草javascript:

function Reply() {
    this.replies = [];
}
Reply.prototype.addText = function( content) {
    this.replies.push( {type: "text", content: content});
    return this;
}
Reply.prototype.addConversation = function( value) {
    if( this.conversation) {
        //throw new Error("Only one conversation allowed");
    }
    this.conversation = {conversation: value};
    return this;
};
Reply.prototype.conversation = null;

// demo
var reply = new Reply();
reply.addText( "one").addText("two").addConversation("memory?");
console.log( JSON.stringify( reply, undefined," "));

(console.log使用JSON字符串化以避免列出继承的方法)

答案 1 :(得分:0)

可能的实现方式是按如下方式创建一个构建器:

old dict = {'bob': ['green', '5'],
 'jeff': ['blue', '4'],
 'sally': ['white', '7']}

然后可以按以下方式使用它:

new_dict = {'bob': ['green', '5'],
 'jeff': ['blue', '4'],
 'sally': ['black', '7']}

Here is a link to a codepen一起玩。

答案 2 :(得分:0)

如果您特别想通过多个函数调用来添加汇编,那么构建器模式是您最好的选择,如vader在其评论中所述。

但是,如果目标是简单地创建简明扼要的这些对象的速记,则可以使用将文本列表作为数组的函数来完成。

const buildObject = (textArray, memory) => {
  return Object.assign(
    {},
    {
      replies: textArray.map(x => {
        return {
           type: 'text',
           value: x
          }
        })
    },
    memory ? {conversation: memory} : null
  )
}
var memory = { };

//with memory
console.log(buildObject(['one', 'two', 'three'], memory ))

//without memory
console.log(buildObject(['one', 'two', 'three']));

小提琴示例:http://jsfiddle.net/ucxkd4g3/