对象文字调用默认属性
Object Literal Calling Default Property
我正在努力处理JavaScript中的对象文字模式。我一直在努力实现丽贝卡·墨菲的例子,并对其进行了修改。
基本上我想能够做两件事
1) 如果没有传递属性-我想要一个默认的属性/例程执行
2) 如果传递了一个属性和一个数组,则应使用传递的对象执行相应的属性/函数
我想知道是否有一种更简单的方法来实现这一点,而不是在函数中调用函数。
var myArr = ["test1", "test2", "test3"];
var stuffToDo = {
bar: function () {
alert('the value was bar -- yay!');
console.log(myArr);
},
baz: function (myArr) {
alert('boo baz :(');
console.log(myArr);
},
def: function (myArr) {
alert('default');
console.log(myArr);
}
};
function Test(varPass)
{
if (varPass) {
varPass();
} else {
stuffToDo['def']();
}
};
Test(stuffToDo['']);
您不需要传递整个函数,只需要传递属性。怎么样:
function Test(prop, arg) {
( stuffToDo[prop] || stuffToDo.def )( arg );
};
Test('whatever', myArr);
我可以想到的另一种方法是将stuffToDo定义为测试函数,然后在该函数上添加对象文字作为静态方法:
var stuffToDo = function(prop, arg) {
( stuffToDo[prop] || stuffToDo.def )( arg );
}
stuffToDo.bar = function( arr ) { alert('bar'); }
stuffToDo.def = function() { alert('default'); }
stuffToDo('bar');
甚至(封装对象):
var stuffToDo = function( prop, arg ) {
({
bar: function(arr) {
alert(arr[0]);
},
baz: function() {
alert('baz');
}
}[prop] || function() {
alert('default');
})( arg );
}
stuffToDo('bar', [1,2,3]);
stuffToDo('404'); // default
好吧,最后一个有点乱:)
javascript,如此多的设计模式。。。。
只需将方法名称传递给Test
,让它判断函数是否存在:
function Test(method){
if (method in stuffToDo) {
stuffToDo[method]();
}
else {
stuffToDo.def();
}
};
Test('');
var myArr = ["test1", "test2", "test3"];
var stuffToDo = function(){
var toDo = { bar: function () {
alert('the value was bar -- yay!');
alert(myArr);
console.log(myArr);
},
baz: function (myArr) {
alert('boo baz :(');
console.log(myArr);
},
def: function () {
alert('default');
console.log(myArr);
}};
return function(param, args){
if(!param) {
toDo.def(args);
} else {
toDo[param](args);
}
};
}();
stuffToDo()
stuffToDo('bar')
stuffToDo('baz', 'argsTest')
注:传递到"baz"answers"def"中的"myArr"参数是在函数范围内定义的新变量;它不会是在"stuffToDo"对象文字之外定义的全局变量
使用ES2xxx
:更容易
const defaultRoutine = input => {
console.info("running default method");
console.log(input);
};
const arrayOperatiion = (array = [], subroutine = defaultRoutine) => {
const subroutineType = typeof subroutine;
subroutineType === "function" ? subroutine(array) : console.error(`cannot execute subroutine of type ${subroutineType}`);
}
arrayOperatiion(['test']);
arrayOperatiion(['test'], "test");
https://repl.it/@ChristopherKeen/默认SO?language=javascript
相关文章:
- Html5输入属性的默认值,如最小值、最大值、大小等
- 如何“;默认“;JavaScript中的布尔属性
- 使用jQuery向“选择选项”添加默认属性
- vue-js-单选按钮won't默认情况下使用v-model属性进行检查
- 向插件添加属性(不是默认方式)
- 默认选中;为什么这个属性甚至存在
- 有没有任何方法可以将json对象存储在HTML标记的默认/自定义属性中,比如<tr>
- 如何在更改的事件处理程序中忽略Polymer元素上默认属性的初始覆盖
- 将javascript(jQuery)对象属性返回到默认状态
- 在JavaScript中,函数的默认值是多少'的原型属性
- 原型上具有默认属性的es6类在traceur中抛出
- 默认情况下,一个模型属性等于 sail.js 模型中的另一个模型属性
- 在 ReactJS 中设置缺失属性的默认值
- Rail对默认情况下隐藏在表单中的属性进行建模
- 为什么我的模型中的默认属性返回未定义
- 如果会话中的属性不为 null 或默认值,则运行/打印 JavaScript Razor ASP.NET MVC
- 如何在 RaphaelJS 中根据需要为文本创建默认属性并链接其他属性
- JavaScript 继承的属性默认值
- 属性默认值:Attribute . defaultvalue
- Null对象中属性默认值的赋值