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"