2017-09-26 66 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; 
}