1

我有一个函数,通过它我将一些变量作为参数传递。我需要其中一些成为变量名或对象属性名。

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);
    }

此处所述的解决方案应该有效,但对我没有任何作用。

 // 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);
4

2 回答 2

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

于 2013-06-24T16:45:37.097 回答
1

在调用key函数时,您将传递一个字符串作为instance参数。因此,您将能够访问字符串的属性,而不是您的door对象。

我假设有一个door对象,因为您可能在其他地方有这样一个对象,它具有您试图在内部访问的属性keyregY在您的示例中)。你应该这样打电话key,然后:

key(500, door, 10, 'bounceOut', 'regY', -150, 5, 'bounceIn');

wheredoor是引用该其他对象的变量。当然,key那时你不会知道里面的变量名。如果您还需要它,则需要将其作为不同的参数传递。然而,这听起来不是一个好的决定,你真的需要它吗?

于 2013-06-24T16:54:25.333 回答