js 面向对象(三) 原型风格与对象关联风格

总是追求用类似C++或者java的方法去创造对象当然可以,这是一种风格。但还有个人觉得更适用与js这种对象比较多的语言的一种对象创建的风格,有些书里也称之为行为委托

即创造一个对象,其他对象使用这个对象的行为的同时,具备自己独特的行为(怎么有点像寄生式继承2333)

两种风格实现同一种功能代码量对比:

//原型风格与对象关联风格
// function Foo(who){
// this.me=who;
// }
// Foo.prototype.identyyify = function() {
// return "i'm "+this.me;
// }
// function Bar(who){
// Foo.call(this,who);
// }
// Bar.prototype=Object.create(Foo.prototype);
// Bar.prototype.speak = function(){
// console.log("hello, "+this.identify()+".");
// };
// var b1=new Bar("b1");
// var b2=new Bar("b2");
// b1.speak();
// b2.speak();
/
Foo={
init : function( who){
this. me = who;
},
identify : function(){
return "I am "+ this. me;
}
};
Bar = Object. create( Foo);
Bar. speak = function(){
console. log( "hello, "+ this. identify()+ ".");
};
var b1= Object. create( Bar);
b1. init( "b1");
var b2= Object. create( Bar);
b2. init( "b2");
b1. speak();
b2. speak();


可见对象关联风格要简洁不少,逻辑关系也简单许多,但适用情况就相对少一些,感觉适用于同一个空间里有一些固定的资源,不同的对象可以用不同的方法去调用这些资源(多。。。多态?)

希望学多了可以回来审视下自己的理解


版权声明:本文为jikexueyuan5555原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。