JavaScript设计模式——原型模式
原型模式:
原型模式是指原型实例指向创建对象的种类,并通过拷贝这些原型创建新的对象,是一种用来创建对象的模式,也就是创建一个对象作为另一个对象的prototype属性;
prototype警告:学习了解原型模式前需先学习原型、原型链、prototype、__proto__、constructor等知识;(https://www.cnblogs.com/dengyao-blogs/p/11481326.html)
实现原型模式:
ES5中的API:Object.create(prototype, optionalDescriptorObjects)
Object.create()方法接收两个参数:第一个参数是__proto__对象,第二个是prototiesObject(可选,使用第二个参数可以初始化额外的其他属性,接受字面量对象形式);
var vehiclePrototype = {
    model:"保时捷",
    getModel: function () {
        console.log('车辆模具是:' + this.model);
    }
};
var vehicle = Object.create(vehiclePrototype,{
    "model":{
        value:"法拉利"
    }
});
vehicle.getModel();  //车辆模具是:法拉利
我们使用Object.create实际上是新建了一个对象vehiclePrototype,并且继承了vehiclePrototype的方法,所以此时vehicle.__proto__ == vehiclePrototype;
第二个参数中初始化了"model"的值,将model的值初始化为了"法拉利",所以此时新创建的对象vehiclePrototype中只有一个model,值为"法拉利";
不用Object.create()实现,用prototype:
var vehiclePrototype = {
    init: function (carModel) {
        this.model = carModel || "保时捷";
    },
    getModel: function () {
        console.log('车辆模具是:' + this.model);
    }
};
function vehicle(model) {
    function F() { };
    F.prototype = vehiclePrototype;
    var f = new F();
    f.init(model);
    return f;
}
var car = vehicle('法拉利');
car.getModel();  // 车辆模具是:法拉利
上述代码中,我们可以看到核心是在vehicle中,我们先创建了一个新的构造函数,然后将该函数的原型指向vehiclePrototype,然后进行实例化该函数,最后继承之后调用prototype上的init方法,最后将执行结果进行返回也是同样可以实现的;
原型模式在JavaScript中无处不在,其他模式中有很多也是基于prototype来实现的,所以好好学习、复习原型和原型链的知识很重要,重点是prototype、__proto__、constructor等关键属性知识点;
JavaScript设计模式——原型模式的更多相关文章
- 10. 星际争霸之php设计模式--原型模式
		题记==============================================================================本php设计模式专辑来源于博客(jymo ... 
- PHP 设计模式 原型模式(Prototype)之深/浅拷贝
		看PHP 设计模式 原型模式(Prototype)时,衍生出一个扩展问题之 原型拷贝的浅拷贝和深拷贝问题(不管写Java还是写PHP还是写JS时都多多少少遇到过对象拷贝问题) 比如写前端页面时 ... 
- PHP设计模式 原型模式(Prototype)
		定义 和工厂模式类似,用来创建对象.但实现机制不同,原型模式是先创建一个对象,采用clone的方式进行新对象的创建. 场景 大对象的创建. 优点 1.可以在运行时刻增加和删除产品 2.可以改变值或结构 ... 
- 【设计模式】Java设计模式 - 原型模式
		[设计模式]Java设计模式 - 原型模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起 ... 
- [设计模式] JavaScript 之 原型模式 : Object.create 与 prototype
		原型模式说明 说明:使用原型实例来 拷贝 创建新的可定制的对象:新建的对象,不需要知道原对象创建的具体过程: 过程:Prototype => new ProtoExam => clone ... 
- JavaScript设计模式-组合模式(表单应用实现)
		书读百遍其义自见 <JavaScript设计模式>一书组合模式在表单中应用,我问你答答案. 注:小编自己根据书中的栗子码的答案,如有错误,请留言斧正. 另:如有转载请注明出处,谢谢啦 &l ... 
- C#设计模式-原型模式
		在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在内存中分配 ... 
- javascript 设计模式-----策略模式
		在<javascript设计模式>中,作者并没有向我们介绍策略模式,然而它却是一种在开发中十分常见的设计模式.最常见的就是当我们遇到一个复杂的表单验证的时候,常常需要编写一大段的if和el ... 
- [工作中的设计模式]原型模式prototype
		一.模式解析 提起prototype,最近看多了js相关的内容,第一印象首先是js的原型 var Person=function(name){ this.name=name; } Person.pro ... 
随机推荐
- codeforces 402 D. Upgrading Array(数论+贪心)
			题目链接:http://codeforces.com/contest/402/problem/D 题意:给出一个a串和素数串b .f(1) = 0; p为s的最小素因子如果p不属于b , 否则 . a ... 
- 聚焦Python分布式爬虫必学框架Scrapy 打造搜索引擎视频教程
			下载链接:https://www.yinxiangit.com/595.html 目录: 第1章 课程介绍介绍课程目标.通过课程能学习到的内容.和系统开发前需要具备的知识 第2章 windows下搭建 ... 
- Django与mongodb数据库的连接
			1.最开始需要下载一个第三方模块:mongoengine 2.下载完成之后,需要在settings中完成配置(在DATABASES后面,别问我为什么,问了我也不告诉你...) connect中传入的是 ... 
- OPENLDAP 服务搭建和后期管理
			LDAP 服务 本文首发:https://www.cnblogs.com/somata/p/OPENLDAPServerConfigAndPostManagement.html 本文主要在debian ... 
- Flink入门宝典(详细截图版)
			本文基于java构建Flink1.9版本入门程序,需要Maven 3.0.4 和 Java 8 以上版本.需要安装Netcat进行简单调试. 这里简述安装过程,并使用IDEA进行开发一个简单流处理程序 ... 
- .Net基础篇_学习笔记_第五天_流程控制while循环
			using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ... 
- 一个vue练手的小项目
			编程路上的菜鸟一枚 : 最近接触了vue 然后写了一个练手的项目 使用vue-cli脚手架来搭建了的项目 技术: vue2 + vue-router + ES6 + axios 框架有 mint- ... 
- MOOC web前端开发笔记(一)
			网站和网页 网站 互联网上用于展示特定内容的相关网页的集合. 网页 网站中的一页,一个网站中的网页通过"超链接"的方式被组织在一起. 主页 进入网站看到的第一个网页,主页的文件名通 ... 
- 41  (OC)*  OC的理解与动态特性
			1:动态类型(Dynamic typing),动态绑定(Dynamic binding)和动态加载(Dynamic loading). 动态类型:即运行时再决定对象的类型.简单说就是id类型.id类型 ... 
- 想研究BERT模型?先看看这篇文章吧!
			最近,笔者想研究BERT模型,然而发现想弄懂BERT模型,还得先了解Transformer. 本文尽量贴合Transformer的原论文,但考虑到要易于理解,所以并非逐句翻译,而是根据笔者的个人理解进 ... 
