2011-08-13 4 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 = create("img", {position: "absolute"}, {src: "img/coffee.png"}); 
this.door = create("img", {position: "absolute"}, {src: "img/door.png"}); 
:それは私が前に働いていたものよりも効率的になるので

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

だから基本的に私は、オブジェクトを宣言するforループを使用しようとしています

...など

create(a, b, c){は、カスタム関数である、私は作品上記のコードを知っている)

任意のアイデアなぜこれが動作していないでしょうか?パラメータとして入力されたオブジェクトはオブジェクトではありませんか?

+0

「this」が範囲を失う可能性がありますか? –

+0

私は 'var me = this;'と 'me.logo'などを使ってその前にしようとしましたが、それは助けになりませんでした。 –

答えて

1

あなたはJavaScriptで<object>.<property>を持っているときはいつでも、値を返すか、設定するために使用することができますいずれか。ポインタとして使用することはできません。この場合:その方法を<object>["name"] = #valueして割り当てる:

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

あなたは、あなたは配列構文を使用する必要があり、動的に何かを割り当てる場合

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 => valueのマッピングを使用しています。

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

Hmmm、オブジェクトのスタイルと他のすべての属性を設定するために私の 'create()'関数でkey => valueマップを使用します。それは公正な点です。しかし 'on 'ではなく' src in var'を意味しましたか? –

+0

@Artur Ah ... typos ... – 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

ああ、あなたはそれが正しいです!私は参照値のことを知らなかった。私はこれで動作するようになった: 'this [a [i] [0]] = create ...'私を啓発してくれてありがとう。 –

+0

問題ありません。説明するもう一つの方法は、あなたのコードが 'var x = this.logo;と同じ理由で動作しなかったことです。 x = 42; 'はthis.logoに42を割り当てません。 – cdhowie

関連する問題