【问题标题】:Get a javascript object's property value using a dynamic property key [duplicate]使用动态属性键获取 javascript 对象的属性值 [重复]
【发布时间】:2016-07-14 11:40:44
【问题描述】:

我目前正在开发一个包含大量 SVG 动画的项目。当用户滚动到 SVG 时,需要触发这些动画。

我决定为每个 Snap.SVG 动画创建函数,并使用 SVG 的 ID 作为键将它们存储在对象数组中,如下所示:

//Example Object

var item = {
    aboutUsSVG: function(){
        //aboutUsSVG animation code to go here
    }
}

到目前为止,我已经在这里创建了我的代码的 Codepen:

http://codepen.io/decodedcreative/pen/mEpZbx

我成功地创建了对象数组。我有第二个功能,当 SVG 在屏幕上时播放动画。我无法使用动态键访问存储在数组中的动画函数。

如果我知道 SVG 的名称,我可以访问该函数:

var playAnimation = animations.animationsArray[0].ourCompanies;

playAnimation();

但我想写一个可以用于网站上所有动画的解决方案,所以希望在 DOM 中查询 SVG ID,然后查找相应的动画。

所以:

var animationID = $(this).find(".svg-animation svg").attr('id');
var playAnimation = svgAnimations.animationsArray[0].animationID;
playAnimation();

但在上面的代码中,animationID 是按字面意思使用的,而不是被 aboutUs 函数替换。

我认为这是一个相当常见的 JS 问题。有人可以帮忙吗?

【问题讨论】:

  • 您正在寻找[ ] 运算符。
  • object[animationID] 将变量放在方括号中,而不是点符号。
  • 你上面的“数组”被称为项目,我没有看到你在下面的任何地方引用item。这让我怀疑这是否是一个命名问题。
  • 你试过括号符号吗?

标签: javascript jquery javascript-objects


【解决方案1】:

要使用变量访问数组的属性,您需要使用括号表示法:

var animationID = $(this).find(".svg-animation svg").prop('id');
svgAnimations.animationsArray[0][animationID]();

【讨论】:

    【解决方案2】:

    您可以使用括号表示法来访问具有动态变量的对象属性

    检查下面的代码

    var animationID = $(this).find(".svg-animation svg").attr('id');
    var playAnimation = svgAnimations.animationsArray[0][animationID];
    playAnimation();
    

    【讨论】:

    • 我确实试过了,但当时似乎没有用。但另一次尝试被证明是成功的。谢谢大家
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 2021-08-27
    • 1970-01-01
    • 2011-09-12
    • 2019-07-01
    相关资源
    最近更新 更多