当我稍后尝试使用此代码附加我创建的对象时,出现“未找到节点”(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 :(得分:2)
我看到你在尝试什么,但是分配给a[i][0]
将分配给数组插槽,而不是数组插槽包含的内容。
此外,当你像这样创建数组时:
[[this.logo, "img/coffee.png"], [this.door, "img/door.png"]]
数组元素[0][0]
不是 {/ 1}}成员的引用,因为它看起来像您期望的那样。数组元素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]});
}
}
答案 1 :(得分: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 =&gt;值映射来使其更明显:
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);