我有一个函数,我通过它传递一些变量作为参数。我需要其中一些成为变量名或对象属性名。
key(500, 'door', 10, 'bounceOut', 'regY', -150, 5, 'bounceIn');
function key(point, instance, speed, ease, prop, value, speed2, ease2, prop2, value2){
ani.instance = true;
createjs.Tween.get(instance, {override: true}).to({prop: value}, -(value + -instance.prop) * speed, createjs.Ease.ease);
}
解决方案here应该有效,但它对我没有任何作用。
// ani.instance changed to:
ani[instance]; // no error here
// instance.prop changed to:
instance[prop]; // returns 'undefined', expected it to return 'door[regY]'. instance and prop return 'door' and 'regY' respectively though
这里发生了什么?任何人都可以朝着正确的方向推动我吗?谢谢:))
修改 我想要的代码是:
door.regY = 200;
createjs.Tween.get(door, {override: true}).to({regY: -150}, -(-150 + -door.regY) * 10, createjs.Ease.bounceOut);
答案 0 :(得分:2)
在ES5中,您只能在对象上创建或获取“动态属性”。所以你需要一个对象,或者使用它。 用[]表示法。
var prop = "something";
this[prop] ="my value";
//this.something=== "my value"
var obj = {};
obj[prop] = "a value";
// obj.something === "a value";
var obj1 = {prop:"value"}
// will not make obj.something === "value"
// but obj.prop==="value" because in this case prop cannot be a variable
所以你需要做那样的事情:
var arg1 = {};
arg1[prop]=value2;
var arg2 = {}
arg2[prop] = value2;
createjs.Tween.get(instance, arg1).to(arg2, -(value2 + -door[prop]) * 10, createjs.Ease.ease);
等等,您需要在将对象传递给createjs.Tween.get
方法之前定义它们。
instance
可能需要是一个对象,而不是一个字符串,但因为我既不知道createJS,也不知道你的脚本。我不知道。
编辑:请阅读:http://www.jibbering.com/faq/faq_notes/square_brackets.html
答案 1 :(得分:1)
在key
函数的调用中,您将字符串作为instance
参数传递。
因此,您将能够访问字符串的属性,而不是door
对象。
我假设有一个door
对象,因为你可能在其他地方有这样一个对象,它有你试图在key
(在你的例子中为regY
)中访问的属性。您应该像这样调用key
,然后:
key(500, door, 10, 'bounceOut', 'regY', -150, 5, 'bounceIn');
其中door
是引用其他对象的变量。当然,你不会知道key
里面的变量名。如果您还需要,则需要将其作为不同的参数传递。但是,这听起来不是一个好的决定,你真的需要吗?