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's属性の実装に魔法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 に答える