我可以调用对象的所有方法吗?

时间:2015-07-05 18:44:11

标签: javascript

假设我有一个对象:

var shapes = {
     addTriangle: function(color){
         console.log("added " + color + " triangle");
     },
     addSquare: function(color){
         console.log("added " + color + " square");
     }
}

此对象将具有将经常更改和更新的方法,但所有方法将始终按顺序运行。有没有办法自动获取和运行所有方法,以简化可维护性? 类似的东西:

function runShapes(color){
    shapeNames = Object.getOwnPropertyNames(shapes);
    for(i = 0; i < shapeNames.length; i++){
        shapeNames[i].apply(color);
    }
}

这给`shapeNames [i] .apply不是一个函数'。奖励点告诉我如何使用函数式编程,而不是for循环:)

Codepen:

http://codepen.io/anon/pen/mJxVyE

2 个答案:

答案 0 :(得分:3)

你必须检查你正在呼叫的财产实际上是一个功能:

action

关于&#39;功能编程&#39;样式,您可以使用foreach,它将您传递的函数作为参数传递给数组的每个元素。所以你的代码应该是这样的:

if( typeof shapes[shapeNames[i]] === "function") {
    // your code here
}

答案 1 :(得分:2)

首先关闭你的错误......你正在遍历属性名称,而不是属性。

$sel = "SELECT user_id FROM users WHERE status='Approved'";     
$result = @mysqli_query ($dbcon, $sel); 

while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) 
{
$ins = "INSERT INTO income (user_id, income_amount)  VALUES ('" . $row['user_id'] . "', '100')";       
$giv = @mysqli_query ($dbcon, $ins);
}

应该是:

shapeNames[i].apply(color);

功能更强大的版本可能如下所示:

shapes[shapeNames[i]](color);