JavaScript 原型和引用趣点

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
    <title></title>
    <script type="text/javascript">
    var arr1=[1,2,3];
     //第一种情况
    //var arr2=arr1; 
    //arr2.push(4);//[arr1的值是:1,2,3,4] arr2是执向arr1的引用,js一切皆引用
    
    //var arr2=arr1.slice();//深、浅拷贝 [arr1的值是:1,2,3] 拷贝一个副本
    
    var arr2=[];
    for(var i in arr1)
    {
      arr2[i]=arr1[i];
    }
    arr2.push(4);
    //alert(arr1);1,2,3
    //alert(arr2);1,2,3,4
 
    function Animal(name,age)
    {
      this.name=name;
      this.age=age;
    }
    Animal.prototype.ShowName=function(){
     alert(this.name);
    }
    
    Animal.prototype.ShowAge=function(){
     alert(this.age);
    }
    function Tuzi(name,age,run)
    {
    //this->new出来的Animal对象,调用父类的构造函数,继承父级的属性
       Animal.call(this,name,age);
       this.run=run;
    }

    //通过原型链来继承父级的方法-- 
   /* 第一种实现
     Tuzi.prototype=Animal.prototype;
    
     Tuzi.prototype.ShowRun=function(){
         alert(this.run);
     }         
      alert(Animal.prototype.ShowRun);
      父类居然弹出子类的ShowRun,很不靠谱
  */  
  for(var i in Animal.prototype) {
         Tuzi.prototype[i]=Animal.prototype[i];
  }   
  Tuzi.prototype.ShowRun=function(){
         alert(this.run);
  } 
  alert(Animal.prototype.ShowRun); //弹出undefied,子类没有影响到父类 </script> </head> <body> </body> </html>

 

posted @ 2013-12-14 16:48  哈哈2222  阅读(282)  评论(0编辑  收藏  举报