我们都知道在java中存在继承,继承的意思就相当于,你从你父母那里继承家产,你拥有了你父母的一切。在java中继承需要用到关键字extends,但是在JavaScript中并不是这样的,下面来看几种实现继承的方法:
1、
<Script>
function fun1() {
}
function fun2() {
this.name = "兰博基尼";
this.run = function() {
alert("我能跑");
};
}
//如果一个对象函数(fun1)想要继承另一个对象函数(fun2)
//那么就让fun1()的原型函数是fun2(),从而实现了继承关系。
fun1.prototype = new fun2();
var car = new fun1();
alert(car.name);
car.run();
</Script>
2、
call属性实现继承:调用一个对象的方法,以另一个对象替换当前对象,具体做法是:function.call(this,参数1,参 数2,.....)后边的参数是传递给function对象函数的。下面来看代码:
<Script>
function fun1(name) {
this.name = name;
this.play = function() {
alert("我的速度很快哦");
};
}
function fun2() {
window.fun1.call(this,"法拉利");
}
var car = new fun2();
alert(car.name);
car.play();
</Script>
3、apply属性实现继承:调用一个对象的方法,以另一个对象替换当前对象,具体做法是:function.apply(this,一个 数组),后边的数组中存储的数据是要传递给function对象函数的参数。下面来看代码:
<Script>
function fun1() {
window.fun2.apply(this,["法拉利","500km/h","$22222222"]);
}
function fun2(name,speed,price) {
this.name = name;
this.speed = speed;
this.price = price;
this.play = function() {
alert("我很快");
};
}
var car = new fun1();
alert(car.name);
alert(car.speed);
alert(car.price);
car.play();
</Script>
其实call属性和apply属性的作用都是一样的,都可以实现继承。只不过实现的方法不一样而已,不同就是在传递参数的时call采用的方法是将所有属性一一列出,而apply采用的方式是将要传递的参数放进一个数组中。
下面来说一下多继承。我们都知道一个对象函数不会仅仅继承一个对象函数,它可以继承多个对象函数来实现功能。下面看代码:
<Script>
//这种方法可以实现多继承,但是在进行操作时要注意
//被继承对象的属性名不可以重复。
function fun1() {
window.fun2.call(this);
window.fun3.apply(this,["play","mm"]);
}
function fun2() {
this.name = "兰博基尼";
this.run = function() {
alert("我能跑");
};
}
function fun3(play,name) {
this.play = play;
this.name = name;
}
var car = new fun1();
alert(car.name);
alert(car.play);
car.run();
</Script>