在您的代码中:
> function setName(obj) {
调用中第一个参数的值分配给局部变量obj。如果传递了一个对象,则obj的值是对该对象的引用。
> obj.name = "raziq";
这会将值“raziq”分配给传递给obj的对象的name属性。如果name属性不存在,则创建它。
> obj = new Object();
这会将一个新的对象引用分配为obj的值,因此它不再引用传递给函数的对象。
> obj.name = "abdul";
这会将值“abdul”分配给obj引用的对象(在上面的行中创建和分配的新对象)的name属性(如果该属性不存在,则创建该属性)。
由于没有对该对象的其他引用,因此一旦函数结束,它就可用于垃圾回收。
> }
>
> var person = new Object();
创建一个新对象并将其分配给变量person。person的值是对新对象的引用。
> setName(person);
调用setName并将上面一行创建的对象传递给它。该函数将raziq分配给对象的name属性(见上文)。
> alert(person.name); //still yields raziq
提醒上面创建并分配给person的对象的name属性的值。由于raziq被指定为值,这就是返回的内容。
请注意,在函数中创建了一个新对象,并在赋值语句中创建了一个name属性,但是该对象没有被分配到任何地方,也没有从函数中返回它,所以后面的所有内容:
obj = new Object();
有效地什么都不做。
请注意,更常见的写法是:
obj = {};
它的结果与前一行完全相同,但输入更少,使用更广泛,因此可能(略微)更易于阅读和维护。