2
function foo() {
    bar = 'ok';
    new baz( this );
}

function baz( foo ) {
    alert( foo.bar );
}

new foo();

アラートに「ok」ではなく「undefined」と表示されるのはなぜですか?

4

4 に答える 4

4

bar範囲外になりました。スコープとコンテキストには違いがあります。プロパティをにアタッチする場合は、プロパティを関数にアタッチfooする必要があります。

function foo() {
     this.bar = 'ok';
     new baz(this);
    }

function baz(foo) {
    alert(foo.bar);
    }

new foo();​
于 2012-08-10T00:11:37.557 に答える
2

その理由は、foo.barがプライベート変数だからです。これに変更すれば動作します

function foo() {
    this.bar = 'ok';
    new baz(this);
    }

function baz(foo) {
    alert(foo.bar);
    }

new foo();
于 2012-08-10T00:11:49.337 に答える
1

変数はプロパティではないため(WRTグローバル変数/プロパティを除く)。ステートメントbarを使用せずにグローバル変数を作成しています。varを使用varしても、作成中のオブジェクトには表示されません。

を使用しているのでnew、プロパティをに設定できますthis

this.bar = "ok"

したがって、完全なコードは...

function foo() {
    this.bar = 'ok';
    new baz(this);
    }

function baz(foo) {
    alert(foo.bar);
    }

new foo();

ちなみに、作成したオブジェクトを保持していないため、newキーワードは無駄にbazなります。

于 2012-08-10T00:10:14.153 に答える
1

baz関数fooが参照として渡されていない場合、それはパラメーターのプレースホルダーです。あなたがそうするとき、あなたはコンストラクターとしてnew foo使っています。またはで宣言されていないため、グローバルです。私はあなたが基本を再考する必要があると思います、この質問はあまりにも間違っています...foobarvarthis.bar

于 2012-08-10T00:12:04.750 に答える