如何合并代码|使变量动态
How to consolidate code | making a variable Dynamic
我想遍历一个对象并运行所有名为init()的函数。
我有以下代码,但它是重复的。如何有效地生成变量的MC和Su实例?
这是重复的代码。
MC.initAll = function() {
for ( var key in MC ) {
if( MC.hasOwnProperty( key ) ) {
if( MC[key].hasOwnProperty( 'init' ) ) {
MC[key].init();
}
}
}
for ( var key in Su ) {
if( Su.hasOwnProperty( key ) ) {
if( Su[key].hasOwnProperty( 'init' ) ) {
Su[key].init();
}
}
}
}
有很多选择。。。
将它们放入一个数组中,然后通过for循环将它们弹出。
使它们成为对象属性,并在对象属性中循环。
进行函数调用并将它们作为参数传入。
使用下方每个玻璃料的对象图
哪一个是最好的还是有更好的方法?
function _iterateAndCallInit(objectToIterateOver)
{
for ( var key in objectToIterateOver ) {
if( objectToIterateOver.hasOwnProperty( key ) ) {
if( objectToIterateOver[key].hasOwnProperty( 'init' ) ) {
objectToIterateOver[key].init();
}
}
}
}
ps:检查objectToIterateOver[key].init
的类型是否是函数可能也是有意义的
typeof objectToIterateOver[key].init == 'function'
尝试
var iterate = [MC, Su], l = iterate.length, i, key;
for( i=0; i<l; i++) {
for( key in iterate[i]) {
if( iterate[i].hasOwnProperty(key) && iterate[i][key].hasOwnProperty("init")) {
iterate[i][key].init();
}
}
}
我不会想太多。只要一个通用的映射函数就可以了:
function object_map(my_object, callback) {
for (var property in my_object) {
if (Object.prototype.hasOwnProperty.call(my_object, property)) {
callback(my_object[property]);
}
}
}
object_map(MC, function (item) {
item.init();
});
object_map(Su, function (item) {
item.init();
});
这减少了在对象中的元素上循环的所有开销(以及潜在的hasOwnProperty
陷阱(我已经纠正了;))。只关注在这个抽象级别上什么是重要的。
相关文章:
- 将变量动态添加到每个控制器的作用域
- 如何合并代码|使变量动态
- 如何将选择复选框值动态传递给 ajax 调用变量动态发布到 php 变量
- 如何根据javascript变量动态更改Facebook评论插件URL
- 如何通过变量动态设置一个国家的颜色
- 如何使用 React.createElement 基于 prop 或变量动态创建组件
- Angularjs基于存储在会话存储中并存储在$scope上的变量动态显示/隐藏元素
- 如何在JavaScript中使用变量动态访问对象属性
- 在ASP.NET MVC3剃刀上使用javascript变量动态创建html操作链接
- 将变量动态添加到URL
- 通过cookie变量动态更改HTML元素
- 给对象赋值.变量动态形成
- 如何使用变量动态构建正则表达式对象
- AngularJS如何用变量动态更新部分作用域
- 将变量动态分配给jquery自动完成查询字符串
- 用户和来宾使用两个不同的模板?或者使用客户端变量动态更改视图
- 根据传递的变量动态添加子字段名
- PHP回显在Javascript变量动态更改饼图图
- 为未定义的变量动态赋值
- 使用相同的划分和变量动态创建谷歌地图