Javascript 将对象作为参数传递后未定义的属性

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

为什么警报显示“未定义”而不是“确定”?

因为变量不是属性(WRT全局变量/属性除外)。通过不使用
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();