日期:2014-05-16 浏览次数:20436 次
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);
??? }
}
?
?
?
2.call 方法方式:
?
function test(str1,str2){
??? alert(this.name + ", " + str1 + ", " + str2);
}
?
var obj = new Object();
obj.name = "userObject";
?
test.call(obj,"hello","world");
注意:这里的“hello” 和“world” 两个参数分别传递给了test方法中的str1和str2,而obj则是传给了test方法中的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.sayWorld=function(){
??????? alert(this.password);
??? }
}
?
?
3.apply 方法方式:
function Parent(username){
??? this.username = username;
?
??? this.sayHello = function(){
??????? alert(this.username);
??? }
}
?
function Child(username,password){
????//Parent.apply(this,[username]);
??? Parent.apply(this,new Array(username));?
?
??? this.password=password;
?
??? this.sayWorld=function(){
??????? alert(this.password);
??? }
}
?
?
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);
}
?
?
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);
}