0%

面向对象的原型模式和对象关联区别

面向对象的原型模式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function Foo(who){
this.me=who
}
Foo.prototype.identify=function(){
return "I am "+this.me
}
function Bar(who){
Foo.call(this,who)
}
Bar.prototype=Object.create(Foo.prototype);
Bar.prototype.speak=function(){
alert("Hello"+this.identify()+".")
}
var b1=new Bar("b1");
var b2=new Bar("b2");
b1.speak();
b2.speak();

原型模式

对象关联的委托模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Foo={
init:function(who){this.me=who},
identify:function(){return "I am "+this.me}
}
Bar=Object.create(Foo);
Bar.speak=function(){
alert("Hello"+this.identify()+".")
}
var b1=Object.create(Bar)
b1.init("b1");
var b2=Object.create(Bar)
b2.init("b2");
b1.speak();
b2.speak();

委托模式

类设计模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Foo{
constructor(who){
var me=who

}
identify(){
return "I am "+this.me
}
}
class Bar extends Foo{
constructor(who){
super();//这里super指的是父类的构造函数,相当于Foo.prototype.constructor.call(this);this指的是子类Bar
this.me=who
}
speak(){
alert("hello"+super.identify())//这里super作为对象,指的是父类的原型对象,相当于Foo.prototype
}
}
var b1=new Bar('b1');
b1.speak();
var b2=new Bar('b2');
b2.speak();