总是追求用类似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();
可见对象关联风格要简洁不少,逻辑关系也简单许多,但适用情况就相对少一些,感觉适用于同一个空间里有一些固定的资源,不同的对象可以用不同的方法去调用这些资源(多。。。多态?)
希望学多了可以回来审视下自己的理解