js开发模式
js中的开发模式进化史:
js中有最初的只能由基本数据类型描述——》单例模式--》工厂模式--》构造函数模式--》原型模式--》各个模式相结合的混合模式,下面我会给大家逐一讲解各个开发模式;
1、单例模式
第一次模式升级引用了对象数据类型:
对象数据类型的作用级好处:
1、分组,把描述同一个事物的所有属性放在一起来描述,每一组都是一个单独的个体(单独的实例);
2、避免冲突-每一个分组中都有自己的私有属性及值,和其他分组不会产生冲突。
var person ={
name:"张松",
age:26
}
var person1 = {
name:"zys",
age:26;
}
我们用以上对象把两个个体实现了分组和独立开,我们说每一个对象都是一个单独的个体|实例 --这就是单例模式(就是一个普通的对象);person不仅叫对象名还可以叫做”命名空间“;
单例模式可以实现简易的”模块化开发“
2、工厂模式:
单例模式虽然实现了分组的作用,但是还是处于手工作业模式,为了增加生产的效率,实现批量生产,就有了工厂模式;
工厂模式其实就是一个函数;
函数的封装:把实现同一个功能的相同代码放在一个函数中,以后再想实现这个功能的时候,我们只需要直接的执行这个函数就可,减少了页面中的坑余代码,提高代码的重复使用率【低耦合高内聚】
function sayHello(name){
var obj={};
obj.name = name;
obj.say= function(){ "Hello "+this.name};
return obj;
}
var person1 = sayHello("张松”);
person1.say();
js中存在多态一词,多态指的是一个方法的多种形态;
同一个方法根据执行时传递参数的不同(值不同、类型不同、参数数量不同)实现不一样的功能的操作就叫做多态

3、构造函数:
构造函数模式:通过new一个类来创建一个实例;
构造函数模式和工厂模式的区别:
一般情况下,我们如果是通过构造函数来创建一个类的话,我们的类名第一个字母要大写,这不是规范,而是大家约定的一个规律;
1、在执行时,构造函数模式是通过 new Object()来执行的,我们把Object称之为一个类,而通过类创建出来的结果(person)就是当前类的一个实例;
2、类也是一个函数,所以也会像普通函数执行一样,形成私有的作用域,形参赋值,预解释,代码从上到下执行;但是构造函数模式在执行之前,浏览器默认会创建一个对象数据类型的值,并且会默认的把这个对象数据类型的值进行返回(不用自己手动的return返回了)
3、把浏览器默认创建的那个对象当做当前函数执行的整体(this)然后通过this。XXX这种方式给默认创建的对象添加属性和属性值
浏览器默认创建的这个对象其实就是我们当前类的一个实例
在构造函数模式创建一个类的时候,方法执行,里面的this其实就是我们当前类的一个实例
function SayHello(name){
this.name = name;
this.say = function(){
alert("Hello"+this.name)
};
}
var p1 = new SayHello("张松“);
p1.say();//类都是函数数据类型的
//console.log(typeof CreateJsPerson);//-->"function"
//类创建出来的实例都是对象数据类型的
//console.log(typeof p1);//-->"object"
4、原型模式
// 首先需要构造函数, 原则就是将独有的属性和方法放在 对象中
function Person ( name, age, gender ) {
this.name = name;
this.age = age;
this.gender = gender;
}
将共享的方法放到默认的 .prototype 原型中,而独有的数据与行为放到对象中
// 将共享的方法提取出来
Person.prototype.sayHello = function () {
console.log( '你好, 我是 ' + this.name );
};
Person.prototype.eat = function () {
console.log( this.name + '在吃饭' );
}; Person.prototype.run = function () {
console.log( this.name + '在跑步. 已经跑了 ' + this.age + ' 年' );
}; // 直接给原型对象添加成员
var p1 = new Person( 'lilei', 19, '男' );
var p2 = new Person( 'hanmeimei', 18, '女' );
js开发模式的更多相关文章
- 鸿蒙的js开发模式19:鸿蒙手机下载python服务器端文件的实现
目录:1.承接上篇鸿蒙客户端上传文件2.域名通过内网穿透工具3.python服务器端代码4.鸿蒙手机的界面和业务逻辑5.<鸿蒙的js开发模式>系列文章合集 1.承接上篇鸿蒙客户端上传文件, ...
- Backbone——数据驱动UI的js开发模式
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826074.html 一:Backbone是什么——JS的MVC框架 Backbone基于undersco ...
- Node.js 开发模式(设计模式)
Asynchronous code & Synchronous code As we have seen in an earlier post (here), how node does th ...
- 从微信小程序到鸿蒙js开发【12】——storage缓存&自动登录
鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口] 正文: 在应用开发时,我们常需要将一些数据缓存到本地,以提升用户体验.比如在一个电商的app中,如果希望用户登录成功后,下次打 ...
- 鸿蒙的js开发部模式16:鸿蒙布局Grid网格布局的应用一
鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口]目录:1.Grid简介2.使用Grid布局实现的效果3.grid-row-gap和grid-colunm-gap属性4.< ...
- 鸿蒙的js开发部模式18:鸿蒙的文件上传到python服务器端
1.首先鸿蒙的js文件上传,设置目录路径为: 构建路径在工程主目录下: 该目录的说明见下面描述: 视图构建如下: 界面代码: <div class="container"&g ...
- 【转】EXT JS MVC开发模式
原文链接:EXT JS MVC开发模式 在app(亦即根目录)文件夹下面创建controller.model.store和view文件夹,从名称上就知道他们该放置什么代码了吧.然后创建Applicat ...
- js架构设计模式——理解javascript中的MVVM开发模式
理解javascript中的MVVM开发模式 http://blog.csdn.net/slalx/article/details/7856769 MVVM的全称是Model View ViewMod ...
- JS工厂模式开发实践
JS工厂模式开发实践 基于JS工厂模式的H5应用,实现了轮播图功能与滑屏功能,并且实现了文字大小的自适应功能,基于SASS样式开发. 核心的JS代码如下: index.js define(functi ...
随机推荐
- Django 路由报错友好提示
这个方法要在设置路由文件内使用也就是urls.py内. """mysite URL Configuration The `urlpatterns` list routes ...
- 解决win10环境下python Selenuim调用Chrome时提示data 及Chrome正在受自动软件控制的方法
用python自动访问谷歌浏览器时会出现data界面,很是烦人.在网上搜索,有说是因为webdriver和google版本不匹配导致的,就下过各种版本,结果都一样. 后来明白了,出现data的原因只是 ...
- 【译】4. Java反射——字段
原文地址:http://tutorials.jenkov.com/java-reflection/fields.html ======================================= ...
- session会话对象
一.session会话对象介绍: 会话对象让你能够跨请求保持某些参数,它也会在同一个session实例发出的所有请求之间保持cookie. 二.步骤 1.对session对象进行一次实例化 2.进行登 ...
- Solr7.1--- 高亮查询
由于测试数据比较少,昨天用Java爬了简书的几百篇文章,唉,又特么两点多睡的.如果你需要这些测试文件GitHub. 如果你看过我前面的文章,直接打开db-data-config.xml文件,添加一个e ...
- Vuex异步请求数据通过computed计算属性值
问题描述: 使用Vuex管理数据时,在组件内使用$emit分发事件后,获取回来的数据要自动更新到该组件内,需要使用computed来计算更新. 一开始尝试使用赋值给data的方法,后来发现重新发起aj ...
- 网络I/O模型总结
把网络IO模型整理了一下,如下图
- python正则提取关键字
python使用正则表达式提取关键字 import sys reload(sys) sys.setdefaultencoding("utf-8") import re ss = & ...
- script ajax / XHR / XMLHttpRequest
s 利用XHR 调试发送form data表单数据,F5键刷新form表单URL ,http请求地址,获取token,提交. 如:http://pcp.cns*****.com/spcp-web/vm ...
- vue this.$router.push和this.$route.path的区别
this.$router 实际上就是全局路由对象任何页面都可以调用 push(), go()等方法: this.$route 表示当前正在用于跳转的路由器对象,可以调用其name.path.quer ...