这你就要看prototype这个JS的代码了

解决方案 »

  1.   

    自己顶一下  顺便把问题说清楚下JavaScript 5.CHM帮助中
    在编写对象定义时,可以使用 prototype 属性来创建由该定义生成且所有对象都具有的属性。原型属性将按引用复制给类中的每个对象,因此这一类中的所有对象的这个属性都相同。不过,可以在一个对象中更改原型属性的值,新的值将覆盖默认值,但仅在该实例中有效。属于这个类的其他对象不受此更改的影响。
    按这句话,我的理解是该变了其中一个实例的属性直,不会影响其他的实例
    <script>
    function car(){}
    car.prototype.color = new Array("red","yellow","blue")
    car.prototype.owner = "pig"
    car1= new car()
    car2= new car()
    car1.color.push("zise")
    car1.owner="liu"
    alert(car1.color)
    alert(car2.color)  //这里居然和 car1.color是一样的  我并没有修改car2.color的属性了。
    alert(car1.owner)
    alert(car2.owner) //这里car2.owner不受影响
    </script>
    请个位大虾请教下            - -!
      

  2.   

    只能说Array比较特殊 它的方法都改变了它本身 指针?<script> 
    function car(){} 
    car.prototype.color = new Array("red","yellow","blue") 
    car.prototype.owner = new String("pig") 
    car1= new car() 
    car2= new car() 
    car1.color = new Array("1","2")//car1.color.push("zise") 
    car1.owner="liu" 
    alert(car1.color) 
    alert(car2.color)  //我使用的是new Array();所以
    alert(car1.owner) 
    alert(car2.owner) //这里car2.owner不受影响 
    </script> 
      

  3.   

    Array是一个引用类型,内存中保存的是对array对象的引用(也就是他指向实际对象的指针)
    其他的属性如.owner,这是个字符串,是个值类型,内存中保存的是他本身。
    所以car1.color和car2.color都是指向同一个Array的
    car1.color.push("zise") 是对那个数组的改变  但是指针没有改变
    你直接  car1.color="Haha"   这时  在看看结果 (这里把color搞成值类型)
    嘿嘿  有时候基础还是很重要的!!
      

  4.   

    car1.color.push("zise")
    操作目标是对象本身
      

  5.   

    你用的push当然会变,用push后实际上 car.prototype.color 也变化了
    用=直接赋值就没有这个问题
      

  6.   

    String.prototype.Up = function(){
    this.toString = function(){ return this.toUpperCase(); }
    }function car(){}car.prototype.owner = new String("pig")car1= new car()
    car2= new car()car1.owner.Up()alert(car1.owner)
    alert(car2.owner)