原型模式(Prototype):用原型实例指向创建类对象,使用于创建新对象的类共享原型对象的属性以及方法。

 //图片轮播类
var LoopImages = function (imgArr, container) {
this.imagesArray = imgArr;//轮播图片数组
this.container = container;//轮播图片容器
}; LoopImages.prototype = {
//创建轮播图片
createImage: function () {
console.log('LoopImages createImage function');
},
//切换下一张图片
changeImage: function () {
console.log('LoopImages changeImage function');
}
}; //上下滑动切换类
var SlideLoopImg = function (imgArr, container) {
//构造函数继承图片轮播类
LoopImages.call(this, imgArr, container);
};
SlideLoopImg.prototype = new LoopImages();
//重写继承的切换下一张图片方法
SlideLoopImg.prototype.changeImage = function () {
console.log('SlideLoopImg changeImage function');
}; //渐隐切换类
var FadeLoopImg = function (imgArr, container,arrow) {
//构造函数继承图片轮播类
LoopImages.call(this, imgArr, container);
this.arrow = arrow;
};
FadeLoopImg.prototype = new LoopImages();
//重写继承的切换下一张图片方法
FadeLoopImg.prototype.changeImage = function () {
console.log('FadeLoopImg changeImage function');
};

原型继承

原型模式更多的是用在对象的创建上。比如创建一个实例对象的构造函数比较复杂,或者耗时比较长,或者通过创建多个对象来实现。此时我们最好不要用new关键字去复制这些基类,但可以通过对这些对象属性或者方法进行负责来创建实例,这是原型模式的最初思想。如果涉及多个对象,我们也可以通过原型模式来实现对新对象的创建。那么首先要有一个原型模式的对象复制方法。

/**********
*基于已经存在的模版对象克隆出新对象的模式
*arguments[0],arguments[1],arguments[2]:参数1,参数2.参数3表示模版对象
*注意。这里对模版引用类型on个的属性实质上进行了浅复制(引用类型属性共享),当然根据需求可以自行深复制。
******/
function prototypeExtend() {
var F = function () { },
args = arguments,
i = 0,
len = args.length;
for (var i = 0; i < len; i++) {
//遍历每个模版对象中的属性
for (var j in args[i]) {
//将这些属性复制到缓存类原型中
F.prototype[j] = args[i][j];
}
}
//返回缓存类的一个实例
return new F();
}

比如企鹅游戏中我们创建一个企鹅对象,如果游戏中没有企鹅基类,只是提供了一些动作模版对象,我们就乐意通过实现对这些模版对象的继承来创建一个企鹅对象。

var penguin = prototypeExtend({
speed: 20,
swim: function () {
console.log('游泳速度' + this.speed);
}
}, {
run: function (speed) {
console.log('奔跑速度' + speed);
}
}, {
jump: function () {
console.log('跳跃动作');
}
});

既然通过prototypeExtend创建的是一个对象,我们就无需再用new去创建新的实例对象,我们可以直接使用这个对象。

penguin.swim();//游泳速度 20
penguin.run(10);//奔跑速度 10
penguin.jump();//跳跃动作

学习《JavaScript 设计模式》 中。

JavaScript设计模式 (1) 原型模式的更多相关文章

  1. 再起航,我的学习笔记之JavaScript设计模式09(原型模式)

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 我们 ...

  2. JavaScript设计模式-3.原型模式

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. Javascript设计模式之原型模式、发布订阅模式

    原型模式 原型模式用于在创建对象时,通过共享某个对象原型的属性和方法,从而达到提高性能.降低内存占用.代码复用的效果. 示例一 function Person(name) { this.name = ...

  4. JavaScript设计模式之----组合模式

    javascript设计模式之组合模式 介绍 组合模式是一种专门为创建Web上的动态用户界面而量身制定的模式.使用这种模式可以用一条命令在多个对象上激发复杂的或递归的行为.这可以简化粘合性代码,使其更 ...

  5. 设计模式_11_原型模式(prototype)深拷贝、浅拷贝

    设计模式_11_原型模式(prototype) 浅拷贝: package designPatternOf23; /** * 定义:用原型实例,指定创建对象的种类,并通过拷贝这些原型创建新的对象 * P ...

  6. C#设计模式(6)——原型模式(Prototype Pattern)

    一.引言 在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在 ...

  7. 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)

    原文:乐在其中设计模式(C#) - 原型模式(Prototype Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:weba ...

  8. js原生设计模式——7原型模式之真正的原型模式——对象复制封装

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  9. C#设计模式之六原型模式(Prototype)【创建型】

    一.引言 在开始今天的文章之前先说明一点,欢迎大家来指正.很多人说原型设计模式会节省机器内存,他们说是拷贝出来的对象,这些对象其实都是原型的复制,不会使用内存.我认为这是不对的,因为拷贝出来的每一个对 ...

随机推荐

  1. psychology

    壹.自身(荣.命)   一.职业分析   ㈠.分析性格→分析长处和短处→分析大家都有的长处→确定自己最终发展的专业.   1 .性格--宗正   耐压力特强,即使肩头责任重大,也能够处理得稳稳当当,是 ...

  2. [Spring] Bean Scope Singleton cs Prototype

    We can define a class to be Singleton or Prototype. If the class was defined as Prototype, then ever ...

  3. A. Polo the Penguin and Strings

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  4. 南阳OJ独木舟上的旅行

     /*独木舟上的旅行 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描写叙述 进行一次独木舟的旅行活动.独木舟能够在港口租到,而且之间没有差别. 一条独木舟最多仅仅能乘坐 ...

  5. 使用adb在电脑和手机间传文件

    首先须要root手机. 然后,"Win + R",打开cmd窗体.以下以copy d:\1.txt到/system/文件夹为例说明. adb push source(localpa ...

  6. install Django in mac

    install Eclipse & Python(pydev) in mac install django in mac $ curl -O https://pypi.python.org/p ...

  7. MySQl 子查询,左右连接,多表连接学习笔记

    1.子查询是指在还有一个查询语句中的SELECT子句.   例句:   SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);   当中, ...

  8. sa分析

    onCheckedChanged用于监控开启和关闭,其实是Switch,也是Toggle Buttons http://www.google.com/design/spec/components/sw ...

  9. C#调用Oracle存储过程的方法

    C#调用Oracle存储过程的方法 准备: 环境:pl/sql+oracle9i+vs2008 创建表test: create table TEST(  ID      NUMBER,//编号  NA ...

  10. USACO Section 1.2PROB Transformations

    挺有趣的一道题,呵呵,不算难 /* ID: jusonal1 PROG: transform LANG: C++ */ #include <iostream> #include <f ...