日期:2014-05-16  浏览次数:20370 次

对象属性值改变的传递问题

function person(name,age)
{
      this.name = name;
      this.age = age;
      this.say =funcsay;
}
function funcsay()
{
      alert(this.name + ":" + this.age);
}
function change(p)
{
      p.name = "lisi";
}
var person1 =new person("zhangsan",18)
change(person1);
person1.say();

在上面的代码输出效果是:

按照普通函数的传递规则,person1.name的值不应该改变成“lisi”的,求解为什么?
难道是change函数只是定义了p这个参数,而没有定义person1.name,所以chang函数改变了person1.name的值。哪位大神知道啊?求指点,感谢了

------解决方案--------------------
function change(p) //传入的值是person1啊,那p= person1
{
      p.name = "lisi";
}
------解决方案--------------------
一般的函数传参,有值传递和引用传递两种。楼主用事实证明了,这里进行了引用传递,也就是说将person1指向的地址值传递给了p,这样p和person1指向相同地址,修改了p.name当然也就修改了person1.name