function foo() {
bar = 'ok';
new baz( this );
}
function baz( foo ) {
alert( foo.bar );
}
new foo();
アラートに「ok」ではなく「undefined」と表示されるのはなぜですか?
function foo() {
bar = 'ok';
new baz( this );
}
function baz( foo ) {
alert( foo.bar );
}
new foo();
アラートに「ok」ではなく「undefined」と表示されるのはなぜですか?
bar範囲外になりました。スコープとコンテキストには違いがあります。プロパティをにアタッチする場合は、プロパティを関数にアタッチfooする必要があります。
function foo() {
this.bar = 'ok';
new baz(this);
}
function baz(foo) {
alert(foo.bar);
}
new foo();
その理由は、foo.barがプライベート変数だからです。これに変更すれば動作します
function foo() {
this.bar = 'ok';
new baz(this);
}
function baz(foo) {
alert(foo.bar);
}
new foo();
変数はプロパティではないため(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なります。
baz関数fooが参照として渡されていない場合、それはパラメーターのプレースホルダーです。あなたがそうするとき、あなたはコンストラクターとしてnew foo使っています。またはで宣言されていないため、グローバルです。私はあなたが基本を再考する必要があると思います、この質問はあまりにも間違っています...foobarvarthis.bar