6

console.log を使用して非常に単純な Javascript をデバッグしようとしていますが、変数が「クラス」メンバー (Chrome 22、Firefox 16) である場合、console.log 呼び出しの後まで変更されない変数の値を出力しています。

私が期待することの例は、次のようになります。

var a = 1;
console.log(a);
a += 20;

//console output says a is 1

ただし、変数が「クラス」メンバーの場合:

var a = new myClass(1);
console.log(a);
a.x += 20;

//console output says a.x is 21

ログが呼び出されたときにコンソールが値をそのままログに記録しない場合、値をログに記録することを最終的に決定するのはいつですか?どうすればこれを回避できますか!?

fwiwここにコード全体があります:

function myClass() {
    myClass.myClass.apply(this, arguments);
    if (this.constructor === myClass) this.myClass.apply(this, arguments);
};
myClass.myClass = function () {};
myClass.prototype.myClass = function (x_) {
    if (x_ === undefined) x_ = 0;
    this.x = x_;
}

var a = new myClass(1);
console.log(a);
a.x += 20;
4

1 に答える 1

8

ただし、オブジェクトの状態は、ロギング時ではなく、コンソールで手動でオブジェクトを展開したときに取得されます。

コンソールで展開するまでに、20を追加するコードはかなり前に(相対的に)実行されており、次のように表示されますx: 21

于 2012-11-04T11:54:03.827 に答える