2017-09-26 38 views
0

我试图按照ES6 Builder pattern,因为我现在开始构建更复杂的对象。构建模式不向对象添加值

到目前为止,我有:

class Opinion { 
    constructor() { 
    this.nuts = ''; 
    } 
} 

class Builder { 
    constructor() { 
    this.opinion = new Opinion(); 
    } 

    withNuts (nuts) { 
    this.nuts = nuts; 
    return this; 
    } 

    build() { 
    return this.opinion; 
    } 
} 

export default Builder; 

这是使用:

import Builder from '../helpers/builder/opinion'; 
const defaultOpinion = new Builder() 
    .withNuts(2.9) 
    .build(); 

输出:

opinion: {"nuts":""} 

为什么没有被内置到对象?另外,当我想要传回一个对象到Builder中进行编辑时,它也会返回空白(这是有道理的),但是我当前的Builder设置允许这么做吗?例如:

const opinionChange = new Builder(defaultOpinion) 
    .withNuts(0.8) 
    .build(); 

非常感谢您的帮助。

+0

你永远不会使用任何地方的生成器的'.nuts'?你期望他们最终结束了什么? – Bergi

回答

2

您错过了分配给this.opinion.nuts的地方,而是在对象上创建自己的属性nuts。与此

withNuts (nuts) { 
    this.opinion.nuts = nuts; 
    return this; 
} 

工作守则

class Opinion { 
 
    constructor() { 
 
    this.nuts = ''; 
 
    } 
 
} 
 

 
class Builder { 
 
    constructor() { 
 
    this.opinion = new Opinion(); 
 
    } 
 

 
    withNuts (nuts) { 
 
    this.opinion.nuts = nuts; // this.opinion.nuts 
 
    return this; 
 
    } 
 

 
    build() { 
 
    return this.opinion; 
 
    } 
 
} 
 

 

 
const defaultOpinion = new Builder() 
 
    .withNuts(2.9) 
 
    .build(); 
 
    
 
console.log(defaultOpinion);

+0

谢谢,所有的价值都返回!是否容易更改构建器以允许传入和更改对象?像这样的例子:'''const opinionChange = new Builder(defaultOpinion) .withNuts(0.8) .build();''' – Ben

+0

这也是一种方法,你需要改变2个构造函数 –

+0

你能指点我正确的方向吗?我怎么能做到这一点?谢谢! – Ben

2

withNuts方法更换应该更新this.opinion.nuts而不是this.nuts

withNuts (nuts) { 
    this.opinion.nuts = nuts; 
    return this; 
}