function foo() {
bar = 'ok';
new baz( this );
}
function baz( foo ) {
alert( foo.bar );
}
new foo();
为什么警报显示“未定义”而不是“确定”?
答案 0 :(得分:3)
bar
已超出范围。 There is a difference between scope and context。如果要将属性附加到foo
,则必须attach the property to the function。
function foo() {
this.bar = 'ok';
new baz(this);
}
function baz(foo) {
alert(foo.bar);
}
new foo();
答案 1 :(得分:2)
因为foo.bar是一个私有变量。将其更改为此并且它将起作用
function foo() {
this.bar = 'ok';
new baz(this);
}
function baz(foo) {
alert(foo.bar);
}
new foo();
答案 2 :(得分: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
上被浪费,因为您没有保留任何创建的对象。
答案 3 :(得分:1)
在baz
函数foo
未作为参考传递时,它是参数的占位符。当您执行new foo
时,您使用foo
作为构造函数。 bar
是全球性的,因为它尚未与var
或this.bar
一起声明。我认为你需要重新审视基础知识,这个问题太错了......