- JScript code
var myArray=function(){ Array.apply(this,arguments); }; myArray.prototype=new Array(); arr=new myArray(1,2,4)
请问上面这样写为什么不行?上回一朋友提供了种方法:
- JScript code
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)
谁能说说为什么这么写就可以了?
------解决方案--------------------
你原来的方法不对,我估计是 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();
------解决方案--------------------
------解决方案--------------------
构造器 是用new调用的,普通函数是用()调用的,fun.apply(obj,args)的具体执行过程可以这样理解:
obj.temp=fun;
obj.fun(args);
delete obj.fun;