1

ブラウザによってスタイルが適用される前にドキュメントの高さを測定することに関係する、かなりあいまいな問題に遭遇しました。詳細はこちら:

6月27日からのデイブハイアットのコメントで、彼は単にdocument.body.offsetLeftプロパティをチェックしてSafariにリフローを強制するようにアドバイスしています。

次のステートメントを使用できますか?

document.body.offsetLeft;

または、それを変数に割り当てる必要がありますか?例:

var force_layout = document.body.offsetLeft;

ブラウザがその値を計算するために?

これは、より基本的な質問に帰着すると思います。つまり、代入ステートメントの一部でなくても、JavaScriptはプロパティの値を評価しますか?これは、特定のブラウザのJavaScriptエンジンがコードを最適化するかどうかに依存しますか?

4

1 に答える 1

2

ステートメントは引き続き評価されます。

     プロパティアクセサー
            | |
            vv
    document.body.offsetLeft;
      ^
      |-識別子リファレンス

上記のステートメントでは、それが一次式documentである識別子参照であることがわかります。

次に、プロパティアクセサ演算子が使用され(.)、プロパティを検索してからbodyプロパティを検索しoffsetLeftます。

実行していませんAssignmentExpressionが、識別子参照が解決され、プロパティが検索されるため、ステートメントが評価されます。

また、ホストオブジェクトは、単純な値のプロパティだけでなく、ロジックとメソッドを持つことができるアクセサプロパティを実装できます。getset

ECMAScript 3では、アクセサープロパティを作成する機能がなく、ホストオブジェクトのみがそれらを実装できましたが、標準の第5版ではそれを実行できます。

たとえば、次のように説明します。

var obj = {};
Object.defineProperty(obj, 'prop', { // ECMAScript 5 method
  get: function () {
    alert('getter');
  }
});

注:上記の例は、IE9 Pre、Firefox 3.7alpha、Chrome 5、およびWebKitのナイトリービルドで機能します。

次に、例として単純な式を使用すると、ゲッターは次のように呼び出すことができます。

obj.prop; // alerts "getter"
于 2010-06-09T18:54:43.593 に答える