五年web前端开发,教你如何用JavaScript插件框架开发模板

JavaScript是现在web市场上最有活力的编程语言之一,更是前端工程师在近几年来火热的根本,所以学好JavaScript成为了这个时代的一个符号。

五年web前端开发,教你如何用JavaScript插件框架开发模板

在这里相信有许多想要学习前端的同学,关注小编文章最后面文字,可免费领取一整套系统的web前端
学习教程! 

然而实际上大部分开发者在运用JavaScript这门语言多数是在脚本,插件,框架的基础上。

通常的JavaScript代码是内嵌在网页中的,这种代码逻辑不会特别复杂,一般是处理页面的交互功能。而遇到特别复杂的逻辑基本就是插件直接上了,这个插件也就是JavaScript文件,别人把逻辑封装好,自己只需要知道如何运用就可以了。包括框架也是一样的道理,框架是一个大的体系,这个体系是针对一个整个项目开发流程的设置,所以使用难度会比插件大,但它本身实际上也是一段JavaScript代码。

而我们学JavaScript肯定不能老是停留在巨人的肩膀的上,如果想在编程的道路上杀出一条血路,那么造轮子才是我们的学一门语言的最终目的。

首先第一步,我们不管是写插件也好还是框架也好,一般来说都会为用户提供一个实例,如JQuery.js的$,Vue.js的的Vue,基本上都是该程序暴露的唯一实例。而这个实例会暴露在任何JS环境下的全局下,所以为了防止在使用该插件或框架的时候,内部的变量会污染全局作用域下的变量,所以所有逻辑代码全部都包裹一个function中,也叫做沙箱。

五年web前端开发,教你如何用JavaScript插件框架开发模板

(function(){

//代码

})()

有这个沙箱之后,接下来要考虑实例暴露问题,我们要暴露在全局中,但是这里有个最大的问题就是引入方式的问题。也就是说我们这个拿这个插件在页面的script标签中,实际上也可以在Node.js或者在其他项目中以模块的形式引入。问题就在这里,在script中全局对象是window,但到了JS中,这个全局变量就变成了global,所以在写逻辑代码之前最好要写判断其引入的方式。但是不管是其他方式,在该模块运行外this永远都指向全局,所以以一个参数的形式接受并判断,以确定如何引入。

(function(global){

})(this)

这个时候逻辑代码就不要写在改函数内了,不然环境判断在没完成的时候下面的所有代码都会编译,那么对性能影响绝对是存在的,所以把环境判断和逻辑给分开。判断写在函数内,而逻辑写在回调函数中

(function(global,factory){

})(this,function(){

//在此写逻辑

})

那么接下来正式逻辑判断,判断哪种环境以哪种方式引入。

(function(global,factory){

typeof exports ==='object' && typeof module !=='undefined' ? module.exports = factory() :

typeof define ==='function' && define.amd ? define(factory) :

(global.Name= factory());

})(this,function(){

//在此写逻辑

})

五年web前端开发,教你如何用JavaScript插件框架开发模板

我来解释下中间那段逻辑是什么意思。

typeof exports = == ‘object’ && typeof module != = ‘undefined’这是判断条件exprots和module是CommondJS模块标准中下的对象,如果对象存在,那么说明引入环境是Node.js或者其他CommndJS环境,那么直接通过module.exports直接引入逻辑代码。否则是其他模式。

typeof define === ‘function’ && define.amd,而这个条件是判断模块引入是以amd标准引入的,像require.js 就是以这种规范引入模块的,以define(factory)方法引入逻辑代码。除去这两种剩下的就是不存在模块引入而是直接调用的情况了,也就是在全局对象中抛出逻辑代码。

前端资料领取)最近有很多想学习前端开发,他们问我有没有什么好的web前端学习资料,我本是一名前端程序员,对于web前端,网页制作这方面的资料我肯定是有的啦!

web前端资料领取学习群:685362217

在解决引入方式问题之后,接下来你要做的就是基于此实例写入你的方法了,因为这是很函数作用域,所以你也不用担心会出现变量污染的问题,尽情发挥你的技术吧。

猜你喜欢

转载自blog.csdn.net/zwjweb/article/details/81036730