我自定义类想继承Array类,请问apply加new Array()方法怎么不行啊?JScript codevar myArrayfunction(){Arr
我自定义类想继承Array类,请问apply加new Array()方法怎么不行啊?
JScript codevar myArray=function(){ Array.apply(this,arguments);};myArray.prototype=new Array();arr=new myArray(1,2,4) 请问上面这样写为什么不行?上回一朋友提供了种方法:
JScript codevar 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) 谁能说说为什么这么写就可以了?
[解决办法] 你原来的方法不对,我估计是 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();
[解决办法] 探讨 楼主,你下面那个方法是我写的,我又试了半天,貌似不行,Array、Date、RegExp这几个对象用原型链方式继承我都没成功……(其他的没试)。猜想你可能想给数组添加什么方法吧,我一般都直接写Array.prototype.xxx=functiong(){...}。如果项目急就暂时先不考虑如何成功继承了,有空再研究研究吧。 PS:求专家指导javascript定义数组、时间时内部到底做了写……[解决办法] 构造器 是用new调用的,普通函数是用()调用的,fun.apply(obj,args)的具体执行过程可以这样理解:
obj.temp=fun;
obj.fun(args);
delete obj.fun;