2011-08-13 34 views
0

我得到一個「找不到節點」(DOM異常8)錯誤,當我後來嘗試添加我與此代碼創建對象:將對象聲明爲參數不起作用?

object.addimgs = function(a){ 
     for (var i = 0; i < a.length; i++){ 
      a[i][0] = create("img", {position: "absolute"}, {src: a[i][1]}); 
     } 
} 

我堵在a數組是這樣的:

[[this.logo, "img/coffee.png"], [this.door, "img/door.png"]]

所以基本上,我試圖用一個for循環聲明的對象,因爲這將是效率比什麼我以前的工作:

this.logo = create("img", {position: "absolute"}, {src: "img/coffee.png"}); 
this.door = create("img", {position: "absolute"}, {src: "img/door.png"}); 

...等

create(a, b, c){是一個自定義函數,我知道上述工程的代碼)

任何想法,爲什麼這將無法正常工作?當它們作爲參數輸入時,對象是否停止成爲對象?

+0

可能'this' be loosing scope? –

+0

我試着在'var me = this;'前面加上'me.logo'等,這並沒有幫助。 –

回答

1

只要你有在JavaScript中<object>.<property>,它可以被用來返回或設置的值。它不能用作指針。在這種情況下:

var o = {} 
function setToFoo(v){ v = "foo" } 
setToFoo(o.foo); 
console.log(o.foo); // undefined 

如果要動態分配的東西,那麼你應該使用數組語法:<object>["name"] = #value和分配這樣:但是

var a = [["logo", "img/coffee.png"], ["door", "img/door.png"]] 
for (var i = 0; i < a.length; i++){ 
    this[a[i][0]] = create("img", {position: "absolute"}, {src: a[i][1]}); 
} 

如果我正在建立類似的方法, ,我實際上會在動態對象中使用key =>值映射,以使其更加明顯:

object.addimgs = function(obj, src){ 
    for (var it in src){ 
     obj[it] = create("img", {position: "absolute"}, {src: src[it]}); 
    } 
} 

var src = {logo: "img/coffee.png", door: "img/door.png"} 
var obj = // whatever your "this" is 
object.addimgs(src, obj); 
+0

嗯,我在我的'create()'函數中使用key =>值映射來設置對象樣式和所有其他屬性,這是一個公平點。但是你的意思是'var src'而不是'on'? –

+0

@藝術家啊...錯別字... – cwallenpoole

+0

雖然哈哈感謝 –

2

我看到你正在嘗試,但分配給a[i][0]將分配給陣列插槽,而不是數組插槽包含的內容。

此外,當創建所述陣列是這樣的:

[[this.logo, "img/coffee.png"], [this.door, "img/door.png"]] 

數組元素[0][0]不是參照所述this.logo構件,因爲它看起來像你期待。數組元素[0][0]將在創建陣列時包含this.logo的值,該值很可能是undefined

嘗試這樣代替:

object.addimgs = function(a){ 
    for (var i = 0; i < a.length; i++){ 
     a[i][0][a[i][1]] = create("img", {position: "absolute"}, {src: a[i][2]}); 
    } 
} 

然後用這個數組來調用它:

[[this, "logo", "img/coffee.png"], [this, "door", "img/door.png"]] 
+0

啊你說得對!我不知道這個參考/價值的東西。我得到它與這個工作: '這[a [i] [0]] =創建...'感謝啓發我。 –

+0

沒問題。解釋它的另一種方式是,你的代碼不起作用,原因與'var x = this.logo; x = 42;'不會將42分配給'this.logo'。 – cdhowie