将对象声明为参数不起作用?

时间:2011-08-13 03:54:36

标签: javascript object

当我稍后尝试使用此代码附加我创建的对象时,出现“未找到节点”(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){是一个自定义函数,我知道上面的代码可以工作)

为什么这不起作用的任何想法?当对象作为参数输入时,对象是否会停止作为对象?

2 个答案:

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