生成器模式应如何处理未定义的可选项
How should the Builder Pattern handle undefined optionals?
我正在用JavaScript构造一个生成器,我不确定构建器通常如何处理可选的未定义值。我想如果字段未定义,生成器不会将可选字段附加到对象。这对建筑商来说是可以接受的吗?如果没有,还有什么替代方案?
下面是构建器不附加未定义的可选的第一个实现的示例:
建筑工人:
function Thing(required1, required2, required3) {
//check required params
var fields = {
required1: required1,
required2: required2,
required3: required3
};
var _withOptionalParam = function(param) {
if(!param) { return this; } //exit function early if param is undefined
fields.param = param;
return this;
};
var _build = function() {
var result = fields;
return result;
};
var builder = {
withOptionalParam: _withOptionalParam,
build: _build
};
return builder;
}
在行动中:
var thing = new Thing("foo","bar","baz").withOptionalParam(undefined).build();
//'thing' should be
// {
// required1:"foo",
// required2:"bar",
// required3:"baz"
// };
//
提前感谢!
我认为您在_withOptinalParam
函数中丢失了this
的上下文。你可以bind
fields
反对它作为this
上下文。
function Thing(required1, required2, required3) {
//check required params
var fields = {
required1: required1,
required2: required2,
required3: required3
};
var _withOptionalParam = function(param) {
if(!param) { return this; } //exit function early if param is undefined
fields.param = param;
return this;
};
var _build = function() {
var result = fields;
return result;
};
var builder = {
withOptionalParam: _withOptionalParam.bind(fields),
build: _build
};
return builder;
}
var thing = new Thing("foo","bar","baz").withOptionalParam(undefined);
console.log( thing );
//'thing' should be
// {
// required1:"foo",
// required2:"bar",
// required3:"baz"
// };
//
<script src="http://codepen.io/synthet1c/pen/WrQapG.js"></script>
相关文章:
- 组件生命周期问题/无法处理未定义的问题
- 处理docXTemplater或javascript对象数组中未定义的值
- 节点.js未捕获的异常类型错误:无法设置未定义的预处理 ''
- 如何处理 getJSON 调用上的“未捕获类型错误:无法设置未定义的属性'prop'”
- 如何处理错误'控制台未定义'在powershell中
- 无法处理Knockout.js Observable Array中未定义的集合
- 在指令中使用 $scope.$watch 处理未定义变量的替代方法
- 对 JavaScript 对象进行优雅的错误处理,以避免未定义的错误
- 如何处理未定义属性的未定义属性 javascript 类型错误
- 问.js节点承诺.“套接字”上缺少错误处理程序.类型错误:无法调用未定义的方法“then”
- 原型方法中的事件处理程序函数,为什么它认为.keyCode是JavaScript中未定义的属性
- 如何让 Chrome 调试器在处理未定义的变量时中断或出错
- 在 Javascript 中处理未定义的变量
- 如何处理未定义的函数参数
- 生成器模式应如何处理未定义的可选项
- 如何处理未定义正文的响应
- 处理未定义对象的内联比三进制更聪明
- 如何处理未定义的查询变量
- 在react.js中处理未定义的props的最好方法是什么?
- 在 NodeJS 中处理未定义的变量简单条件