JavaScript中的继承

1)对象冒充

function Parent(username)

{

this.username =  username;

this.sayHello = function()

{

alert(this.username);

}

}

function Child(username, password)

{

//将子对象的this指向了父对象的this,从而实现了父对象的继承

this.method = Parent;

this.method(username);

delete this.method;

this.password = password;

this.sayWord = function()

{

alert(this.password);

}

}


var parent = new Parent("zhang");

var child = new Child("zhang2", "123");


parent.sayHello();

child.sayHello();//继承的Parent的方法

child.sayWord();


2)call方法方式实现继承

call方法是Function对象中的方法

一、call方法的使用

function test(str)

{

alert(this.name + ",  " + str);

}

var object = new Object();

object.name = "zhang";

//test.call相当于调用了test函数

test.call(object, "zhang2");//将object赋给了this

call方法是Function对象中的方法,因此我们定义的每个函数都拥有该方法。

可以通过函数名来调用call方法,call方法的第一个参数会被传递给函数中的this,

从第二个参数开始,逐一赋值给函数中的参数。

二、call方法实现继承

function Parent(username)

{

this.username = username;

this.sayHello = function()

{

alert(this.username);

}

}

function Child(username, password)

{

Parent.call(this, username);

this.password = password;

this.sayWord = function()

{

alert(this.password);

}

}

var parent = new Parent("zhang");

var child = new Child("wang", "123");


parent.sayHello();

child.sayHello();

child.sayWord();

依次出现的对话框的内容为“zhang”、“wang”、“123”


3)apply方法方式实现继承

function Parent(username)

{

this.username = username;

this.sayHello = function()

{

alert(this.username);

}

}

function Child(username, password)

{

Parent.apply(this, new Array(username)); //定义数组的另一种方式[username]

this.password = password;

this.sayWord = function()

{

alert(this.password);

}

}

var parent = new Parent("zhang");

var child = new Child("wang", "123");


parent.sayHello();

child.sayHello();

child.sayWord();

依次出现的对话框的内容为“zhang”、“wang”、“123”


4)原型链(prototype chain)方式实现对象继承

function Parent()

{



}


Parent.prototype.hello = "hello";

Parent.prototype.sayHello = function()

{

alert(this.hello);

}

function Child()

{


}

Child.prototype = new Parent();

Child.prototype.world = "world";

Child.prototypr.sayWorld = function()

{

alert(this.world);

}

var child = new Child();


child.sayHello();

child.sayWorld();

依次出现的对话框的内容为“hello”、"world"


5)使用混合方式实现对象的继承(推荐使用)

function Parent(hello)

{

this.hello = hello;

}

Parent.prototype.sayHello = function()

{

alert(this.hello);

}

function Child(hello, world)

{

Parent.call(this, hello);//call实现属性的继承

this.world = world;

}

Child.prototype = new Parent(); //原型实现方法的继承

Child.prototype.sayWorld = function()

{

alert(this.world);

}

var child = new Child("aaa", "bbb");

child.sayHello();

child.sayWorld();

依次出现的对话框的内容为“aaa”、"bbb"



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值