0

我只是想从 After Effects ScriptUI API 创建一个包含多个控件的对象。

这就是我的 obj 的样子:

var easeyPeasy = {};

// groups
easeyPeasy.groups = {
  "easeIn_grp": ease__Panel.add('group', undefined, {
    name: 'easeIn group'
  }),
  "easyEase_grp": ease__Panel.add('group', undefined, {
    name: 'easyEase group'
  }),
  "easeOut_grp": ease__Panel.add('group', undefined, {
    name: 'easeOut group'
  })
};

// labels
easeyPeasy.label = {
  "easeIn_label": easeyPeasy.groups["easeIn_grp"].add('statictext', undefined, 'ease in:', {
    name: 'easeIn_label'
  }),
  "easyEase_label": easeyPeasy.groups["easyEase_grp"].add('statictext', undefined, 'easy ease: ', {
    name: 'easyEase_label'
  }),
  "easeOut_label": easeyPeasy.groups["easeOut_grp"].add('statictext', undefined, 'ease out:', {
    name: 'easeOut_label'
  })
};

// slider
easeyPeasy.slider = {
  "easeIn_slider": easeyPeasy.groups["easeIn_grp"].add('slider', undefined, 50, 0, 100, {
    name: 'easeIn_slider'
  }),
  "easyEase_slider": easeyPeasy.groups["easyEase_grp"].add('slider', undefined, 50, 0, 100, {
    name: 'easyEase_slider'
  }),
  "easeOut_slider": easeyPeasy.groups["easeOut_grp"].add('slider', undefined, 50, 0, 100, {
    name: 'easeOut_slider'
  })
}

// inputs
easeyPeasy.inputs = {
  "easeIn_input": easeyPeasy.groups["easeIn_grp"].add('edittext', undefined, 50, {
    name: 'easeIn_input'
  }),
  "easyEase_input": easeyPeasy.groups["easyEase_grp"].add('edittext', undefined, 50, {
    name: 'easyEase_input'
  }),
  "easeOut_input": easeyPeasy.groups["easeOut_grp"].add('edittext', undefined, 50, {
    name: 'easeOut_input'
  })
}

如果我知道尝试返回lengtheaseyPeasy.inputs的示例,我只会得到undefined

alert(easeyPeasy.inputs.length)

除此之外,我无法通过键索引在我的 obj 中选择值。它只能通过密钥字符串工作。

在职的:

alert(easeyPeasy.inputs["easeIn_input"])

不工作:

alert(easeyPeasy.inputs[0])

有谁知道我在这里想念什么?提前致谢

4

3 回答 3

4

您似乎期望 JavaScript 对象的行为类似于 PHP 数组。他们没有。

数组具有名称为数字的属性和长度属性,该属性等于最大数字属性的名称加一。

对象只是具有命名属性。

您可以使用Object.keys().

var data = {
  foo: "foo_val",
  bar: "bar_val"
};
var props = Object.keys(data);
for (var i = 0; i < props.length; i++) {
  document.body.appendChild(
    document.createTextNode(
      data[props[i]]
    )
  )
  document.body.appendChild(
    document.createElement("br")
  );
}

于 2016-02-23T10:09:29.637 回答
0

您已经创建了一个 Javascript 对象;它只存储可通过键访问的值。

要确定字符长度,您需要先将其转换为字符串表示形式:

var json = JSON.stringify(easeyPeasy)
于 2016-02-23T10:15:46.477 回答
0

如果要遍历对象的属性,还可以使用for-in

例子

var obj = {
  test1:"test1",
  var1:10,
  var2:20,
  var3:30
}

for (var key in obj){
  document.write(key + " :  " + obj[key] + "<br/>");
}

于 2016-02-23T10:16:42.180 回答