这是目前最为常用的创建对象的方式。
这种概念非常简单,即用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法)。结果是,所有函数都只创建一次,而每个对象都具有自己的对象属性实例。此外,组合模式还支持向构造函数传递参数,可谓是集两家之所长。在所接触的js库中,jQuery类型的封装就是使用组合模式来实例的!
function Monster(name, arr){
constructor: Monster,
this.name = name;
this.job = arr;
}
Monster.prototype = {
run: function(){return this.name + '的工作是' + this.job}
}
var monsterI=new Monster('小旋风', ['巡山', ‘打更’]);
var monsterII=new Monster('小转风', ['巡山', ‘打更’]);
动态原型方法
动态原型方法的基本思想与混合的构造函数原型方式相同,即在构造函数内定义非函数属性,而函数属性则利用原型属性定义。
组合模式中实例属性与共享方法(由原型定义)是分离的,这与春面向对象语言不太一致;动态原型模式将所有构造信息都封装在构造函数中,又保持了组合的优点。
其原理就是通过判断构造函数的原型中是否已经定义了共享的方法或属性,如果没有则定义,否则不再执行定义过程。改方式只在原型上方法或属性只定义一次,且将所有构造过程都封装在构造函数中,对原型所做的修改能立即提现所有实例
function Monster(name, arr){
this.name = name;
this.job = arr;
if(typeof this.run != 'function') {
Monster.prototype = {
run: function(){return this.name + '的工作是' + this.job}
}
}
}
网友评论