obj = new Object();obj.name = "Greg"; 通过new一个新的实例,并赋值给obj(之前是person按值传递的副本),我们把obj的指针指向了新的内存区域,并赋值为"Greg",此时obj和person因为不是指向同一块内存区域,所以person.name还是原来的Nicholas。
如果还不理解,请认真理解下面的例子:
var person = newObject();
person.name = "Tabweng";
var anotherPerson = person;
console.log(anotherPerson.name); //TabWeng
person.name = "Weng";
console.log(anotherPerson.name); //Weng
person = newObject();
person.name = "Tab";
console.log(anotherPerson.name); //Weng
我自己又写的测试例子:
//按值传参跟基本类型复制赋值是一个道理,将变量的值拷贝一个副本赋给另一个变量二者是独立的互不影响
// var o ="sb";
// function test(o){//相当于基本变量复制赋值,不会改变外部o的值,
// //如果是引用变量赋值,引用的是同一个对象会改变值
// o="gd";
// }
// test(o);
// alert(o);//弹出sb
// function setName(o){
// //调用此函数的时候将对象赋值给局部变量o
// //也就是将对象的副本赋给o,此时o和外部传入的
// //对象指针都是指向同一个对象
// o.name="mab";
// }
// var person = new Object();
// setName(person);
// alert(person.name);
function setName(o){
//调用此函数的时候将对象赋值给局部变量o
//也就是将对象的副本赋给o,此时o和外部传入的
//对象指针都是指向同一个对象
o.name="mab";
o = {name:"sb"};
//相当于重新new了一个对象赋给o此时生成的新对象将引用赋给o,
//这样o跟外部对象就是指向两个不同的引用
alert(o.name);
}
var person = new Object();
setName(person);
alert(person.name);