1

我想知道是否有更好的方法来处理多个函数调用。基本上我有一个函数,它接收和元素作为参数之一,以及一些属性。我必须在几个元素上调用这个函数......

function positionMe(element,position){ ... }

positionMe(obj1,top);
positionMe(obj2,left);
positionMe(obj3,bottom);
positionMe(obj4,right);
positionMe(obj5,bottom);

只看代码似乎我做错了什么。起初我以为我可以传入一组元素,但它似乎不起作用。有任何想法吗?

4

3 回答 3

2

使用您提供的信息,我将创建一个包含所有需要信息的数组,并在您的函数中循环遍历它:

function positionMe(elements)
{
    for(var i = 0, numberOfElements = elements.length; i < numberOfElements ; i++) {
        // Do stuff with the objects you want to do in here

        // access the current object
        console.log(elements[i].object);

        // access the current direction
        console.log(elements[i].direction);
    }
}

var yourObjects = [
    {
        object: obj1,
        direction: 'top'
    },
    {
        object: obj2,
        direction: 'left'
    },
    {
        object: obj3,
        direction: 'bottom'
    },
    // etc
];
positionMe(yourObjects);

更新

正如反射评论

更好地使用 for (var i in element) { console.log(elements[i].object);}

javascript 中的数组不是这种情况。好吧,这不是那么简单。因为您最终还将循环遍历数组对象的所有继承内容,例如pop()push()。有一种方法可以通过使用hasOwnProperty().

另一种方法forEach()是使用从 JavaScript 1.6 开始可用的方法。所以我认为并不是所有的用户代理都已经内置了对此的支持。

于 2012-09-26T01:55:29.347 回答
2
<script src="http://code.jquery.com/jquery-latest.js"></script>

<script>

var objArray = [
 ["obj1","top"],
 ["obj2","bottom"],
 ["obj3","middle"]
];

$.each(objArray, function(i, v) {positionMe(v[0], v[1]);});

function positionMe(element, val) {
   alert (element+":"+val);
}

</script>
于 2012-09-26T02:00:01.027 回答
0

如果您的对象是页面上的元素,您可以使用 jQuery 的 $.each() 函数在每个事件上运行该函数。语法将像这样工作:

$('selector that grabs all objects').each(positionMe($(this), position));
于 2012-09-26T01:56:56.280 回答