2013-06-24 54 views
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); 
    } 

該解決方案指出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

是意向'{道具:值}'來創建一個名字'regY'的屬性?如果是這樣,你需要'var O = {}; O [prop] = value;'並傳遞'O' –

+0

@AlexK。不完全的。在這個函數之外,'door.regY'已經被定義。這個特殊的位{{prop:value}'對'get(instance,{override:true})'有反應。我想讓它讀取'get(door,{override:true})。({door:regY})'等。 – AKG

回答

1

在你key功能的invokation,你傳遞一個字符串作爲instance參數。 因此,你將能夠訪問字符串,而不是你door對象的屬性。

我假設有一個door對象,因爲你可能有這樣一個對象在其他地方,裏面有你想訪問(在你的例子regYkey內的財產。你應該叫key這樣,那麼:

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

其中door是一個變量引用其他對象。當然,你不知道key裏面的變量名。如果你也需要這個,你需要把它作爲一個不同的參數傳遞。然而,這聽起來不是一個好的決定,你真的需要它嗎?

+0

感謝您的回覆。我正在盡全力去關注,因爲我真的是JavaScript的初學者,並試圖學習。所以我不能傳遞一個文字字符串的功能? ('instance','prop'等作爲佔位符) – AKG

+1

如果你傳遞一個字符串,你需要的地方得到實際的對象('door'),使用該字符串。比方說,你必須存儲在一個名爲instanceStorage對象所有的'instance's,你可以用這樣的名字讓你的實例(內部'key'):'比如= instanceStorage [實例]'。注意你將失去你的字符串值,你用實際的對象覆蓋它(你可以使用一個不同的變量名來保持它們)。然而,如果你沒有地方通過名字來獲得你的實例,你將無法做你想做的事情,你只需要將實際的實例傳遞給'key'。 – Esteban

+0

我推薦[Eloquent Javascript](http://eloquentjavascript.net/contents.html)書籍來獲取JavaScript的語法和語義。在(Superhero.js)[http://superherojs.com/]中也有優秀的(主要是更高級的)文章。 – Esteban

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