博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
underscore.js源码学习一(框架解读)
阅读量:7183 次
发布时间:2019-06-29

本文共 1071 字,大约阅读时间需要 3 分钟。

在学习underscore.js源码之前,我们先来了解下js模块管理发展的几个历程。

任何编程语言都有一套模块化的代码结构组织思想,同样js也存在,由于js早期特殊的创作历程,导致它缺乏一个统一的语言规范,之后加入了ECMA以及node.js的出现形成的CommonJS规范,js语言逐渐走上正规的发展道路,我们知道underscore.js诞生于js被标准化之前,在这之前,js的工具库都采用“立即调用函数表达式”也被成为IIFE( Immediately Invoked Function Expression)的形式来组织代码结构,回到历史,我们通过对underscore.js骨架代码分析,来学习这种代码组织形式.

// 组织形式1,通过return对象提供外部访问入口var _ = (function(){  var modules = {};    // 封装对外访问的方法  modules.helloworld = function() {    console.log("hello world!");  };  return modules;})()_.helloworld() //hello world!// 将内部方法绑定到全局对象上(function(){  var root = this;  var _ = {};  // 挂载到全局对象上  root._ = _;    // 封装对外访问的方法  _.helloworld = function() {    console.log("hello world!");  };})()_.helloworld() //hello world!

比较以上两段代码都实现了模块封装,第一种是通过返回挂载对象,外部接受该对象进行调用,第二种是将对外的函数入口挂载到全局对象上,外部进行调用

再来看下underscore.js的框架结构

(function(){  // ...}.call(this))

这里使用了call,来看下func.call(this)这句代码是什么意思?

var func = function() {  console.log("我是一个打印函数");}func.call(this) // 我是一个打印函数func() // 我是一个打印函数

这种写法同我们前边的挂载全局写法一样,js语法很灵活,写法也很灵活。

到此,我们实现了一个underscore.js代码的基本骨架,然后就是一个个方法挂载到"_"这个对象上,外部进行调用。

转载地址:http://spykm.baihongyu.com/

你可能感兴趣的文章
开发者必读 移动端页面优化的10个好方法
查看>>
Nest 为何刚宣布开放 API,就能吸引到重量级盟友?
查看>>
JavaScript之this指针深入详解
查看>>
服务器运行过程中如何进行维护
查看>>
Web前端知识杂乱 如何分清主次和学习优先级?
查看>>
数据驱动的迷思
查看>>
软件工程师欲发动DDoS攻击白宫网站 抗议特朗普就任总统
查看>>
在中关村问小米
查看>>
Duolingo推出聊天机器人功能帮助你学习外语
查看>>
《企业级ios应用开发实战》一3.3 MVC模式
查看>>
巴菲特正寻求可再生能源领域的投资机会
查看>>
《Android程序设计》一3.4 静态应用资源和上下文
查看>>
固态硬盘SSD在关键场合的应用
查看>>
详述机柜的不同分类及常见配件
查看>>
CWA成员称其领导人被捕后将增加对美国政府的攻击
查看>>
谭铁牛当选CVPR 2021大会主席,华人学术力量不容小觑
查看>>
中诚信携手神州控股助推智慧城市到信用城市发展
查看>>
想用好云?先看看这10条安全建议
查看>>
数据中心电源仍然困扰着CIO
查看>>
美南方电力解围东芝西屋困局 计提损失将减一半生 “蝴蝶效应”
查看>>