//call()//调用一个对象的一个方法,以另一个对象替换当前对象。//call([thisObj[,arg1[, arg2[, [,.argN]]]]])//参数//thisObj //可选项。将被用作当前对象的对象。 //arg1, arg2, , argN //可选项。将被传递方法参数序列。 //说明//call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。//如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。function Person(name){ //父类 this.name=name; this.SayHello=function(){alert("Hello, I'm "+this.name);};}function Employee(name,salary){ //子类 Person.call(this,name); //将this传给父构造函数 this.salary=salary; this.ShowMeTheMoney=function(){alert(this.name+" $"+this.salary);};}var BillGates=new Person("Bill Gates");var SteveJobs=new Employee("Steve Jobs",1234);BillGates.SayHello(); //显示:I'm Bill GatesSteveJobs.SayHello(); //显示:I'm Steve JobsSteveJobs.ShowMeTheMoney(); //显示:Steve Jobs $1234alert(BillGates.constructor == Person); //truealert(SteveJobs.constructor == Employee); //true
直接定义prototype似乎更有extends 的意韵
function Person(name){ //父类 this.name=name; this.SayHello=function(){alert("Hello, I'm "+this.name);};}function Employee(salary){ //子类 this.salary=salary; this.ShowMeTheMoney=function(){alert(this.name+" $"+this.salary);};}Employee.prototype=new Person("Steve Jobs");var SteveJobs=new Employee(1234);SteveJobs.SayHello(); //显示:I'm Steve JobsSteveJobs.ShowMeTheMoney(); //显示:Steve Jobs $1234
注:这里的Person.call(this.name)就像super(this.name)一样,哥在java里都不太用,不过了解一下总是好的