<h1>语言之魂——原型模式</h1>
<p>原型模式(Prototype):用原型实例指向创建对象的类,是用于创建新的对象的类共享源性对象的属性与方法。</p>
<script>
//图片轮播
var LoopImages = function( imgArr, container ){
this.imgArr = imgArr; //轮播图片的数组
this.container = container; //轮播图片的容器
};
LoopImages.prototype = {
//创建轮播图片
createImage: function(){
console.log( "LoopImage createImage function" );
},
//切换下一张图片
changeImage: function(){
console.log( "LoopImage changeImage function" );
}
};
//上下滑动切换类
var SlideLoopImg = function( imgArr, container ){
//构造函数继承图片轮播
LoopImages.call( this, imgArr, container );
};
SlideLoopImg.prototype = new LoopImages();
//重写继承的切换一下一张图片方法
SlideLoopImg.prototype.changeImage = function(){
console.log( "SlideLoopImage changeImage function" );
}
</script>
<p>原型的拓展:原型对象时一个共享对象,那么不论是父类的实例对象或者子类的继承,都是对她的一个指向引用,所以原型对象才会被共享。既然被共享,那么对源性对象的拓展,不论是子类或者父类的实例对象都会继承下来。</p>
<p>原型继承:不过原型模式更多是用在对对象的创建上。比如创建一个实例对象的构造函数比较复杂,或者耗时比较长,或者创建多个对象来实现。此时我们最好不要用new 关键字去复制这些基类,但可以通过对这些对象属性或方法进行复制来实现创建,这是原型模式的最初思想。
如果涉及多个对象,我们也可以通过原型模式来实现对新对象的创建。那么首先就要有个原型模式的对象复制方法。</p>
<script>
/**
基于已经存在的模板对象克隆出新对象的模式
arguments[0]、arguments[1]参数表示模板对象
注意:这里对模板对象引用类型的属性实质上进行了浅复制(引用类型属性共享),当然可以根据需求自行进行深复制
*/
var propertyExtend = function(){
var F = function(){}, //缓存类,为实例化返回对象临时创建
args = arguments, //模板对象参数序列
i = 0,
len = args.length;
for( ; i< len; i++ ){
//遍历每个模板对象中的属性
for( var j in args[ i ] ){
//将这些属性复制缓存到缓存类原型中
F.prototype[ j ] = args[ i ][ j ]
}
}
//返回缓存类的实例
return new F();
}
</script>
js原型模式
最新推荐文章于 2024-04-24 06:24:31 发布