本帖最后由 xinfucheng 于 2012-07-04 00:51:47 编辑

解决方案 »

  1.   

    你原来的方法不对,我估计是 Array.apply(this,arguments);这句继承的时候Array对象里面的属性和方法应该有显式的定义。下来的例子就可以:
    function Person(name,age) 
       {
         this.name = name||"default name" ;
         this.age = age||"default age" ;
         this.showPerson = function()
     {
       alert("Person类:name="+this.name+" ,age="+this.age);
     }
       }
       
       function Student(name,age,grade)
       {
         Person.apply(this,arguments);//继承Person的属性和方法  call也可以,但是参数不是数组格式 Person.call(this,name,age)
     this.grade = grade ;
     this.showStudent = function()
     {
       alert(" student类:grade="+this.grade);
     }
       }
       var student = new Student("bury","15",'2');
       student.showPerson();
       student.showStudent();
      

  2.   

    楼主,你下面那个方法是我写的,我又试了半天,貌似不行,Array、Date、RegExp这几个对象用原型链方式继承我都没成功……(其他的没试)。猜想你可能想给数组添加什么方法吧,我一般都直接写Array.prototype.xxx=functiong(){...}。如果项目急就暂时先不考虑如何成功继承了,有空再研究研究吧。PS:求专家指导javascript定义数组、时间时内部到底做了写什么,底层怎么实现的。
      

  3.   

    哦 我还真没注意 IE里不行 FF可以继承
      

  4.   


    更正一下:var myArray=function(){
       var x=Array.apply(null,arguments);
       for(var p in x)this[p]=x[p];
       this.length=x.length;
    };
    myArray.prototype=new Array();
    arr=new myArray(1,2,4)
    alert(arr)是可行的,我说不可行是指构造体内用xxx.apply(this,argumengs)来构造的继承方式,对于Array、Date、RegExp对象没试成功。
      

  5.   

    真的继承了吗?试下alert(arr.toString());
      

  6.   

    在子类中我重写了toString方法,在子类不能把toString方法写成原型的形式,可能是String类里面的toString方法写在类构造函数里,如果把子类里的toString方法写成了原型形式,它是无法覆盖父类中的toString方法的,我还在子类中用了str=this.substr(1),按说这是String类的方法,说明myString继承String的其它方法成功了!我理解的不知道对不对? 如果对的话,请问javascript中怎么实现不让子类继承的父类某一个方法呢?
    代码如下:
    function  myString(){
        String.apply(this,arguments)
    this.str=arguments[0];
    this.toString=function(){
    return this.str
    }
    alert(typeof(this))
    str=this.substr(1);
    alert(str)
    };
    myString.prototype=new String();
    arr=new myString(1232)
      

  7.   

    构造器 是用new调用的,普通函数是用()调用的,fun.apply(obj,args)的具体执行过程可以这样理解:
     obj.temp=fun;
     obj.fun(args);
     delete obj.fun;