一个详细的解决方法,调用基于Javascript的调用()()和应用()来实现继承机制。
调用()方法电话()方法是经典的对象冒充方法最相似的方法。它的第一个参数为一个对象。其他参数直接传递到函数本身。例如:
复制代码代码如下所示:
函数sayHello(sprefix,ssuffix){
警报(this.name +说+ sprefix + ssuffix);
};
var obj =新的对象();
obj.name =汤姆;
sayhello.call(obj,你好
在这个例子中,函数sayHello()是外部定义的对象,即使它不属于任何对象,它也可以指关键字this.的对象的名称属性等于蓝色。当电话()方法被调用,第一个参数是对象,说明该关键字值在sayHello()函数应该OBJ。第二个和第三个参数都是字符串匹配。他们在打招呼的参数sprefix和ssuffix()函数,最后生成的消息,汤姆说,世界你好。将显示。
要使用继承机制的对象模拟方法使用此方法,只需替换前三行的赋值、调用和删除代码。
复制代码代码如下所示:
函数的ClassA(scolor){
this.color = scolor;
this.saycolor =函数(){
警戒(这个颜色);
};
}
函数B(scolor,SNAME){
/ / this.newmethod = A;
/ / this.newmethod(彩色);
/ /删除this.newmethod;
ClassA.call(,scolor);
this.name =国;
this.sayname =函数(){
警报(这个名字);
};
}
在这里,我们需要做的关键词这类等于新创建的B对象,所以这是第一个参数,第二个参数,scolor,是两类唯一的参数。
应用()方法
应用程序()方法有两个参数,分别用作一个对象和一个要传递给函数的参数数组:
复制代码代码如下所示:
功能saycolor(sprefix,ssuffix){
警报(sprefix + this.color + ssuffix);
};
var obj =新的对象();
obj.color =蓝色;
saycolor.apply(obj,新数组(颜色
这个例子和前面的例子一样,但适用()方法现在被称为。当采用()方法被调用,第一个参数是对象,说明这个关键词的价值在saycolor()函数将对象的第二个参数是一个由两个字符串数组。它匹配参数sprefix和ssuffix在saycolor()函数。最后一条信息仍然是颜色是蓝色的,非常漂亮的颜色
此方法还用于替换前三行分配、调用和删除新方法的代码:
复制代码代码如下所示:
函数B(scolor,SNAME){
/ / this.newmethod = A;
/ / this.newmethod(彩色);
/ /删除this.newmethod;
ClassA.apply(这个新的数组(scolor));
this.name =国;
this.sayname =函数(){
警报(这个名字);
};
}
以同样的方式,第一个参数仍然是这样的,第二个参数是唯一值的颜色数组,B整个争论的对象可以在应用二参数传递()方法:
复制代码代码如下所示:
函数B(scolor,SNAME){
/ / this.newmethod = A;
/ / this.newmethod(彩色);
/ /删除this.newmethod;
ClassA.apply(这个参数);
this.name =国;
this.sayname =函数(){
警报(这个名字);
};
}
当然,这些参数对象只能通过在父类参数的顺序是完全一样的子类参数的顺序。如果不是,你必须创建正确的顺序在一个单独的数组并将参数。此外,电话()方法也可以使用。
我们可以看出,这两种方法可以很好地替代原始对象模拟,使编写更加简单,但是这些方法的缺点是子类不能继承原型链上父类声明的方法或属性。为了解决这个问题,下一篇文章将介绍在Javascript中实现继承的另一种方法——原型链继承。