JavaScript五种继承方式

1)继承第1种方式:对象冒充

function Parent(username){
	this.username = username;
	this.sayHello = function(){
		alert(this.username);
	}
}
function Child(username,password){
	//下面三行是关键代码
	this.method = Parent;
	this.method(username);
	delete this.method;
	this.password = password;
	this.sayWorld = function(){
		alert(this.password);
	}
}
var parent1 = new Parent("jack");
var child1 = new Child("kyle","123");
parent1.sayHello();
child1.sayHello();
child1.sayWorld();

2)继承第2种方式:call方法

call方法是Function对象中的方法,因此我们定义的每个函数都拥有该方法。可以通过函数名来调用call方法,call方法的第一个参数会被传递给函数中的this,从第二个参数开始,逐一赋值给函数中的参数。

function Parent(username){
	this.username = username;
	this.sayHello = function(){
		alert(this.username);
	}
}
function Child(username,password){
	Parent.call(this,username);
	this.password = password;
	this.sayWorld = function(){
		alert(this.password);
	}
}
var p1 = new Parent("jack");
var c1 = new Child("kyle","123");
p1.sayHello();
c1.sayHello();
c1.sayWorld();

3)继承第3种方式:apply方法

apply方法与call方法的不同之处在于,apply方法第二个参数传递的是一个数组,而不像call方法那样以离散的形式传递参数。

function Parent(username){
	this.username = username;
	this.sayHello = function(){
		alert(this.username);
	}
}
function Child(username,password){
	Parent.apply(this,new Array(username));
	this.password = password;
	this.sayWorld = function(){
		alert(this.password);
	}
}
var p1 = new Parent("jack");
var c1 = new Child("kyle","123");
p1.sayHello();
c1.sayHello();
c1.sayWorld();

4)继承第4种方式:原型链方式

该方式的缺点是不能够传递参数。初始化必须要等对象创建之后

function Parent(){

}
Parent.prototype.hello = "hello";
Parent.prototype.sayHello = function(){
	alert(this.hello);
}
function Child(){

}
Child.prototype = new Parent();
Child.prototype.world = "world";
Child.prototype.sayWorld = function(){
	alert(this.world);
}
var c1 = new Child();
c1.sayHello();
c1.sayWorld();

5)继承第5种方式:混合方式(推荐)

function Parent(hello){
	this.hello = hello;
}
Parent.prototype.sayHello = function(){
	alert(this.hello);
}
function Child(hello,world){
	Parent.call(this,hello);
	this.world = world;
}
Child.prototype = new Parent();
Child.prototype.sayWorld = function(){
	alert(this.world);
}
var c1 = new Child("HELLO","WORLD");
c1.sayHello();
c1.sayWorld();


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值