簡體   English   中英

動態對象名稱屬性不起作用

[英]Dynamic object name property not working

我有一個函數,我通過它傳遞一些變量作為參數。 我需要其中一些成為變量名或對象屬性名。

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

在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

在您的key函數的調用中,您將傳遞一個字符串作為instance參數。 因此,您將能夠訪問字符串的屬性,而不是door對象的屬性。

我假設有一個door對象,因為你可能在其他地方有這樣一個對象,它有你試圖在key內部訪問的屬性(在你的例子中是regY )。 你應該像這樣調用key ,然后:

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

其中door是引用其他對象的變量。 當然,你不會知道key內的變量名。 如果您還需要,則需要將其作為不同的參數傳遞。 但是,這聽起來不是一個好的決定,你真的需要嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM