嘿,我想知道这两个代码有什么区别?第一个工作,但第二个不工作?
First >>
for (i=0; i<$sequencingArray.length; i++){
...
$($sequencingArray[i]).delay(i*100).animate({'margin-left':$masterWidth});
...
}
Second >>
$propToAnimate = 'margin-left';
for (i=0; i<$sequencingArray.length; i++){
...
$($sequencingArray[i]).delay(i*100).animate({$propToAnimate:$masterWidth});
...
}
答案 0 :(得分:6)
这是一个有效的解决方案......
$propToAnimate = {'margin-left': $masterWidth};
$($sequencingArray[i]).delay(i*100).animate($propToAnimate);
“您不能将变量用作对象文字中的属性名称。” from here
答案 1 :(得分:0)
当您使用{'margin-left':$masterWidth}
或{$propToAnimate:$masterWidth}
时,您正在创建一个对象。因此,当我们使用Object Initializer({k0:v0, k1:v1}
)语法创建对象时,我们需要知道我们在做什么。
最重要的是,对于您的案例var a = {prop:20}
和var a = {'prop':20}
,两者都会做同样的事情 - 使用一个名为prop
的属性创建一个对象。如果您已在其他地方说过var prop = 'different'
,则无关紧要,prop
在{prop:20}
中使用时仅被视为文字名称,并且未进行评估。
使代码的第二个版本工作的方法是使用对象的a['prop']
语法。如下所示:
var prop = 'margin-left';
var obj = {}; // Create a new object with no propeties
obj[prop] = masterWidth; // Add a new property to obj (using the value of the variable prop as the name of the new property)
然后你将obj['margin-left'] == masterWidth
。您可以在animate函数中使用此对象... animate(obj);
我希望我不会太困惑!