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
使っています。またはで宣言されていないため、グローバルです。私はあなたが基本を再考する必要があると思います、この質問はあまりにも間違っています...foo
bar
var
this.bar