function foo() {
bar = 'ok';
new baz( this );
}
function baz( foo ) {
alert( foo.bar );
}
new foo();
为什么警报显示“未定义”而不是“确定”?
function foo() {
bar = 'ok';
new baz( this );
}
function baz( foo ) {
alert( foo.bar );
}
new foo();
为什么警报显示“未定义”而不是“确定”?
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
or声明this.bar
。我认为你需要重新审视基础知识,这个问题太错误了......