2

如果我们写这个——

var myVariable={
   propertyA:"valueA",
   propertyB:"valueB",
}

我们可以propertyB这样称呼——

myVariable.propertyB

记住这一点,当我们写 -

document.getElementById('myDiv').style.visibility='hidden'

我们可以这样写,像这样——

document.getElementById('myDiv').style={
                                   visibility:'hidden',
                                   display:'inline',
                                 }

好吧,如果那是正确的,那么我们可以这样做——

document.getElementById('myDiv')={
       innerHTML:'this is a div',
       style:{
         visibility:'hidden',
         display:'inline',
       }
}

现在,如果这些是正确的,那么可能也是——

document={
  getElementById('myDiv'):{
    innerHTML:'this is a div',
    style:{
      visibility:'hidden',
      display:'inline',
    }
  }
  getElementById('mySpan'):{
    innerHTML:'this is a span',
    style:{
      visibility:'visible',
      display:'table',
    }
  }
}

那么,其中有多少是错误/正确的?如果错了,为什么以及什么是错的?你能给我更多与此相关的信息吗?

提前致谢 :-)

4

2 回答 2

3

所有 Javascript 对象都是哈希,反之亦然——所以你的假设是基于事实的。但是,Javascript 赋值是一种替换操作,而不是扩充。这可以在一个简单的例子中很容易地看出:

obj = { a: { b: 2 } }
obj.a.b   // => 2
obj.a = { c: 3 }
obj.a.c   // => 3
obj.a.b   // => undefined

HTMLElement除非在 a的属性的实现中使用魔法,style否则分配给它不会简单地合并值。您分配的链条越靠前,您造成的伤害就越大。

最后,在对象文字中 a 之前给出的任何值:都应该是字符串或裸字(将被引用)——变量和函数调用(如getElementById('mySpan'))不能用作对象文字中的键。

但是,您可以通过以下方式获得您正在寻找的行为:

var divStyles = document.getElementById('myDiv').style;
var styles = { visibility:'hidden', display:'inline' };

for (key in styles) {
  if (styles.hasOwnProperty(key)) {
    divStyles[key] = styles[key];
  }
}

开销可能值得也可能不值得,这取决于您要更改的属性数量。

于 2012-06-14T20:48:21.087 回答
1

每当你这样做

myVar.someObject = { ... }

您完全覆盖了“someObject”,丢弃了它在分配之前的所有属性。

var myvar = { obj: {a:1, b:2} };
myvar.obj = {a:3}

console.log(myvar.obj.a) // 3; ok
console.log(myvar.obj.b) // undefined; oh no!
于 2012-06-14T20:35:47.893 回答