如何一次创建图像元素及其属性?

Þor*_*son 4 javascript object

编辑:改变问题和标题,以反映我的意图,根据菲利克斯的建议

我想要做的是创建一个子对象"obj",其工作方式如下:

upperMostObject.obj      //This is an image
upperMostObject.obj.src  //This is an attribute of the image
Run Code Online (Sandbox Code Playgroud)

以及我希望能够创造它的方式,也就是我想要实现的目标

var imgCollection = {
    catImage: document.createElement("img"),
    catImage: {
        src: "http://whatever.source.com/image.png",
        width: 30,
        height: 30,
    },
}
Run Code Online (Sandbox Code Playgroud)

但前者在这种情况下catImage: document.createElement("img")会被覆盖.

Sci*_*ter 9

您需要使用String 对象(不是原始对象),或toString()为对象定义自定义方法.

第一种方法:

var upperMostObject = {};
upperMostObject.obj = new String("topValue"); // as a String object
upperMostObject.obj.subObj = "subValue";
Run Code Online (Sandbox Code Playgroud)

这是因为字符串原语不能保存属性,而String对象可以.

String你使用松散的equals(==)进行比较时,要注意使用对象时,你不能使用严格的equals(===).也typeof someStringObject将是"object",不是"string".

第二种方法(可以"一次完成"):

var upperMostObject = {
    obj: {
        toString: function(){return "topValue"},
        subObj: "subValue"
    },
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为无论upperMostObject.obj == 'topValue'何时将对象强制转换为字符串(例如),它都会在内部调用其toString方法.

  • 您也可以将`subObj`添加到`String.prototype`,尽管这是一个非常邪恶的选择. (3认同)
  • @Scimonster非常感谢您的回复.我学到了一些东西,尽管我试图找到一种让upperMostObject.obj成为图像元素的方法.然而,我学到了一些东西.我为不在原始问题中包含我的意图而道歉,并且我已经为我想要实现的目标更新了它.我很抱歉没有更详细地解释,因为这是一个很好的答案. (2认同)