我不太确定如何解释,因此我将从输出开始。 我需要退货:
{
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。另外,对话是可选的,在这种情况下,如果没有对话,则对话对象不应出现在输出中。
答案 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']}
答案 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']));