Javascript 将对象作为参数传递后未定义的属性
为什么警报显示“未定义”而不是“确定”?因为变量不是属性(WRT全局变量/属性除外)。通过不使用Javascript 将对象作为参数传递后未定义的属性,javascript,Javascript,为什么警报显示“未定义”而不是“确定”?因为变量不是属性(WRT全局变量/属性除外)。通过不使用var语句,您正在创建一个全局变量bar。即使使用var,它也不会显示在正在构造的对象上 由于您使用的是new,因此可以在此上设置属性 function foo() { bar = 'ok'; new baz( this ); } function baz( foo ) { alert( foo.bar ); } new foo(); 所以完整的代码是 this.bar
var
语句,您正在创建一个全局变量bar
。即使使用var
,它也不会显示在正在构造的对象上
由于您使用的是new
,因此可以在此上设置属性
function foo() {
bar = 'ok';
new baz( this );
}
function baz( foo ) {
alert( foo.bar );
}
new foo();
所以完整的代码是
this.bar = "ok"
顺便说一下,new
关键字被浪费在baz
上,因为您没有保留任何创建的对象。bar
已超出范围。如果要将属性附加到foo
,则必须
这是因为foo.bar是一个私有变量。换成这个就行了
function foo() {
this.bar = 'ok';
new baz(this);
}
function baz(foo) {
alert(foo.bar);
}
new foo();
在baz
函数中,foo
不是作为引用传递的,它是参数的占位符。当您执行newfoo
时,您将foo
用作构造函数bar
是全局的,因为它没有用var
或this.bar
声明。我认为你需要重新审视基本知识,这个问题太错误了…@Alnitak:是的,很好。我将补充这一澄清。谢谢。也许我应该,但我来自PHP,今天是我用JavaScript编写代码的第二天。谢谢
function foo() {
this.bar = 'ok';
new baz(this);
}
function baz(foo) {
alert(foo.bar);
}
new foo();
function foo() {
this.bar = 'ok';
new baz(this);
}
function baz(foo) {
alert(foo.bar);
}
new foo();