热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

模块化编程、MVC、面向对象编程

模块化编程所谓模块化编程,就是将代码模块化,每一块代码都只进行一种操作,可以这样理解吧。全局变量和局部变量的转换模块化编程重要的一点就是&
模块化编程

所谓模块化编程,就是将代码模块化,每一块代码都只进行一种操作,可以这样理解吧。

全局变量和局部变量的转换

模块化编程重要的一点就是,在一个模块里,所有的变量都是局部变量(对整个项目来说,对这个模块来说当然可以是全局变量了)

模块化编程如何将全局变量转变为局部变量:

  1. 把所有代码都放在一个函数里面
  2. 再执行这个函数
  3. 这样除了这个函数是全局变量,其它都变成限制在这个函数里的局部变量了

我连那个函数这个全局变量都不想要了:

  1. 设置为匿名函数
  2. 立即执行,直接call()

    function(){//your code
    }.call()

函数立即执行的优点:

  • 没有全局变量
  • 而只有用函数才能有局部变量

不好意思,chrome不支持,的解决办法:

  • 前面加!表示这是个立即执行函数。不过会对这个函数的返回值取反,不过立即执行了就没了,不关心它的返回值

    !function(){//your code
    }.call()

  • ()包起来。问题是如果前面有代码,比如xxx(function(){}).call(),这就等于调用xxx了,等价于xxx().call()。。。function(){}只是传入的参数

    (function(){//your code
    }).call()

  • 把函数名设置成随机数。机智(๑•̀ㅂ•́)و✧~~
MVC

MVC是一种代码整理的思路

  • Model:用来存储数据相关的操作
  • View:用来存储表现层的元素,用户看的见的页面上的元素
  • Controller:用来存储各种行为、逻辑代码

MVC
MVC_示意图

上面这张图可以很好的展现MVC之间的互动关系。

  • 首先,用户只能接触到V上的东西,就是页面所展现的内容
  • 当用户和V开始交互了,一直在监听VC会知道哪一个元素被动了,就会运行相应的代码
  • 通常情况下,C会调用M,这个时候,M就会向服务器server发送请求要数据,server自然会返回一个响应
  • 获得响应的M将数据返回给C,C再将数据更新在V上,就是再页面上更新
面向对象编程

愚见:深度模块化。将所有的重复的代码都提取出来形成对象、构造函数等,在需要使用的时候,调用或者使用new等进行操作。

this的几个小例子

button.onclick=function(){console.log(this);
}

?上面的this指向button?

button.addEventListener('click',function(){console.log(this);
})

?上面的this指向button?

$('ul').on('click','li',function(){console.log(this);
})

?上面的this指向li?

var x=X();
x.f1(option);function X(){return object{ //①,对象object里的this都指向对象objectoption:null,f1(x){this.option=x;this.f2(); //②②},f2(){this.option.f2.call(this); //③③③}}
}var option={f1(){},f2(){console.log(this); //④④④④}
}

?执行完头两句,最终会调用对象optionf2(){console.log(this);}。这里的this指向对象object?

new

new原型链有很大关联,都是当需要创建很多很多个对象,而这些对象如果有很多相同的属性和方法,将这些相同的属性和方法提取出来,做成一个模板、原型new的作用就是表明用这个模板、原型新生成一个对象。

创建士兵:

createSoldier(1);function createSoldier(id){var rookieSoldier={ID:id,};rookieSoldier.__proto__=createSoldier.prototype;return soldier
}createSoldier.prototype={兵种:"火枪兵",生命值:42,攻击:function(){},防御:function(){},行军:function(){}
}

使用new创建士兵:
???下面createSoldier函数里的注释内容,就是使用new后,js自动帮你添加的(当然是看不见的)。我们需要写的是this.ID = id这样自定义的内容和createSoldier.prototype公共的内容???

new createSoldier(1);function createSoldier(id){//var temp={};//this = temp;//this.__proto__=createSoldier.prototype;this.ID = id;//return this;
}createSoldier.prototype={兵种:"火枪兵",生命值:42,攻击:function(){},防御:function(){},行军:function(){}
}

常见的new的使用:

var object = new Object(); //object.__proto__=Object.prototype
var array = new Array(); //array.__proto__=Array.prototype
var string = new String(); //string.__proto__=String.prototype
var number = new Number(); //number.__proto__=Number.prototype

请参考:https://blog.csdn.net/a153375...
请参考:https://zhuanlan.zhihu.com/p/...

与与或

这里在讨论||&&的返回值

||或表达式中,有一个是真即返回这个真的值(第一个真值):
&&与表达式中,有一个是假即返回这个假的值(第一个假值):
注意:并不是返回true或者false,而是返回这个真值或者假值!!!
所有的假值:NaN 0 '' undefined false null

0 || 12 || 'a' //返回12
var a= {} || undefined || 12 //a={}

0 && 12 && 'a' //返回0
var a= {} && undefined && 12 //a=undefined



推荐阅读
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
author-avatar
筷子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有