四、$jQuery
1、你觉得jQuery或zepto源码有哪些写的好的地方
jquery源码封装在一个匿名函数的自执行环境中,有助于防止变量的全局污染,然后通过传入window对象参数,可以使window对象作为局部变量使用,好处是当jquery中访问window对象的时候,就不用将作用域链退回到顶层作用域了,从而可以更快的访问window对象。同样,传入undefined参数,可以缩短查找undefined时的作用域链
(function( window, undefined ) {
//用一个函数域包起来,就是所谓的沙箱
//在这里边var定义的变量,属于这个函数域内的局部变量,避免污染全局
//把当前沙箱需要的外部变量通过函数参数引入进来
//只要保证参数对内提供的接口的一致性,你还可以随意替换传进来的这个参数
window.jQuery = window.$ = jQuery;
})( window );
jquery将一些原型属性和方法封装在了jquery.prototype中,为了缩短名称,又赋值给了jquery.fn,这是很形象的写法
有一些数组或对象的方法经常能使用到,jQuery将其保存为局部变量以提高访问速度
jquery实现的链式调用可以节约代码,所返回的都是同一个对象,可以提高代码效率
2、jQuery 的实现原理?
(function(window, undefined) {})(window);jQuery利用JS函数作用域的特性,采用立即调用表达式包裹了自身,解决命名空间和变量污染问题window.jQuery = window.$ = jQuery;在闭包当中将 jQuery 和
暴露为全局变量
3、jQuery.fn 的 init 方法返回的 this 指的是什么对象? 为什么要返回 this?
jQuery.fn 的 init 方法 返回的 this 就是 jQuery 对象
用户使用 jQuery() 或 $() 即可初始化 jQuery 对象,不需要动态的去调用 init 方法
4、jQuery.extend 与 jQuery.fn.extend 的区别?
$.fn.extend()和$.extend()是jQuery为扩展插件提拱了两个方法$.extend(object); // 为jQuery添加“静态方法”(工具方法)
$.extend({
min: function(a, b) { return a < b ? a : b; },
max: function(a, b) { return a > b ? a : b; }
});
$.min(2,3); //
$.max(4,5); //
$.extend([true,] targetObject, object1[, object2]); // 对targt对象进行扩展
var settings = {validate:false, limit:5};
var options = {validate:true, name:"bar"};
$.extend(settings, options); // 注意:不支持第一个参数传 false
// settings == {validate:true, limit:5, name:"bar"}
$.fn.extend(json); // 为jQuery添加“成员函数”(实例方法)
$.fn.extend({
alertValue: function() {
$(this).click(function(){
alert($(this).val());
});
}
});
$("#email").alertValue();
5、jQuery 的属性拷贝(extend)的实现原理是什么,如何实现深拷贝?
浅拷贝(只复制一份原始对象的引用)
var newObject = $.extend({}, oldObject);深拷贝(对原始对象属性所引用的对象进行进行递归拷贝)
var newObject = $.extend(true, {}, oldObject);
6、jQuery 的队列是如何实现的?队列可以用在哪些地方?
jQuery 核心中有一组队列控制方法,由
queue()/dequeue()/clearQueue()三个方法组成。主要应用于
animate(),ajax,其他要按时间顺序执行的事件中
var func1 = function(){alert('事件1');}
var func2 = function(){alert('事件2');}
var func3 = function(){alert('事件3');}
var func4 = function(){alert('事件4');}
// 入栈队列事件
$('#box').queue("queue1", func1); // push func1 to queue1
$('#box').queue("queue1", func2); // push func2 to queue1
// 替换队列事件
$('#box').queue("queue1", []); // delete queue1 with empty array
$('#box').queue("queue1", [func3, func4]); // replace queue1
// 获取队列事件(返回一个函数数组)
$('#box').queue("queue1"); // [func3(), func4()]
// 出栈队列事件并执行
$('#box').dequeue("queue1"); // return func3 and do func3
$('#box').dequeue("queue1"); // return func4 and do func4
// 清空整个队列
$('#box').clearQueue("queue1"); // delete queue1 with clearQueue
7、jQuery 中的 bind(), live(), delegate(), on()的区别?
bind直接绑定在目标元素上live通过冒泡传播事件,默认document上,支持动态数据delegate更精确的小范围使用事件代理,性能优于 liveon是最新的1.9版本整合了之前的三种方式的新事件绑定机制
8、是否知道自定义事件? jQuery 里的 fire 函数是什么意思,什么时候用?
事件即“发布/订阅”模式,自定义事件即“消息发布”,事件的监听即“订阅订阅”
JS 原生支持自定义事件,示例:
document.createEvent(type); // 创建事件
event.initEvent(eventType, canBubble, prevent); // 初始化事件
target.addEventListener('dataavailable', handler, false); // 监听事件
target.dispatchEvent(e); // 触发事件
jQuery 里的 fire 函数用于调用 jQuery 自定义事件列表中的事件
9、jQuery 通过哪个方法和 Sizzle 选择器结合的?
Sizzle选择器采取Right To Left的匹配模式,先搜寻所有匹配标签,再判断它的父节点jQuery通过$(selecter).find(selecter);和Sizzle选择器结合
10、jQuery 中如何将数组转化为 JSON 字符串,然后再转化回来?
// 通过原生 JSON.stringify/JSON.parse 扩展 jQuery 实现
$.array2json = function(array) {
return JSON.stringify(array);
} $.json2array = function(array) {
// $.parseJSON(array); // 3.0 开始,已过时
return JSON.parse(array);
} // 调用
var json = $.array2json(['a', 'b', 'c']);
var array = $.json2array(json);
11、jQuery 一个对象可以同时绑定多个事件,这是如何实现的?
$("#btn").on("mouseover mouseout", func);
$("#btn").on({
mouseover: func1,
mouseout: func2,
click: func3
});
12、针对 jQuery 的优化方法?
缓存频繁操作
DOM对象尽量使用
id选择器代替class选择器总是从
#id选择器来继承尽量使用链式操作
使用时间委托
on绑定事件采用
jQuery的内部函数data()来存储数据使用最新版本的
jQuery
13、jQuery 的 slideUp 动画,当鼠标快速连续触发, 动画会滞后反复执行,该如何处理呢?
在触发元素上的事件设置为延迟处理:使用
JS原生setTimeout方法在触发元素的事件时预先停止所有的动画,再执行相应的动画事件:
$('.tab').stop().slideUp();
14、jQuery UI 如何自定义组件?
- 通过向
$.widget()传递组件名称和一个原型对象来完成 $.widget("ns.widgetName", [baseWidget], widgetPrototype);
15、jQuery 与 jQuery UI、jQuery Mobile 区别?
jQuery是JS库,兼容各种PC浏览器,主要用作更方便地处理DOM、事件、动画、AJAXjQuery UI是建立在jQuery库上的一组用户界面交互、特效、小部件及主题jQuery Mobile以jQuery为基础,用于创建“移动Web应用”的框架
16、jQuery 和 Zepto 的区别? 各自的使用场景?
jQuery主要目标是PC的网页中,兼容全部主流浏览器。在移动设备方面,单独推出 `jQuery MobileZepto从一开始就定位移动设备,相对更轻量级。它的API基本兼容jQuery`,但对PC浏览器兼容不理想
17、jQuery对象的特点
- 只有
JQuery对象才能使用JQuery方法 JQuery对象是一个数组对象
四、$jQuery的更多相关文章
- jquery选择器(原创)<四>
前面学习了基本选择器,现在学习过滤选择器中的简单过滤选择器: 简单过滤选择器,主要根据索引值对元素进行筛选,这些过滤选择器类似于CSS的伪类选择器,他们均以冒号(:)开头,并且要与另外一个选择器一起使 ...
- 你不需要jQuery(四)
jQuery是个好东西.它诞生于IE6在互联网称霸的那个时代.jQuery的存在让我们的代码能很好的兼容各种平台. 然而,到如今,浏览器技术已经取得了巨大的进步.我们可以自由的使用所有最新众多ES5/ ...
- 第33日 我疯了集成平台(六)-步履轻盈JQuery(四)
6一个月28日本,天阴下雨. " 微雨过,小荷翻,榴花开欲燃.玉盆纤手弄清泉,琼珠碎却圆." 古老的JavaScript,且乱且复杂.封装成库,青春焕发,这样人们 ...
- jQuery源码笔记——四
each()实现 var jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context ) ...
- 【锋利的Jquery】读书笔记四
jquery中的事件及动画 一.事件 页面加载 $(document).ready(function(){xxxxx}) 简写 $(function(){ //do something }) 元素绑定 ...
- Web前端基础(17):jQuery基础(四)
1. jQuery的属性操作 jquery的属性操作模块分为四个部分:html属性操作,dom属性操作,类样式操作和值操作 html属性操作:是对html文档中的属性进行读取,设置和移除操作.比如at ...
- [jQuery]jQuery和DOM对象互换(四)
DOM 和 jQuery 相互转换 DOM 转jQuery $(DOM对象) # (1)直接获取 $('video'); # (2)转换 $(DOM对象) var myVideo = document ...
- jQuery简单入门(四)
4.表单应用 表单是HTML的重要组成部分,在采集.提交用户输入的信息和显示列表数据等需求中有重要作用 表单应用 一个简单的表单HTML示例: <form action=”url” method ...
- jQuery事件(四)
一.基本事件函数下面事件函数中参数相关说明:eventType:事件类型,字符串'click' 'submit'多个事件类型可以通过用空格隔开[一次性绑定'click submit']eventDat ...
- Jqgrid入门-别具特色的Pager Bar (四)
Pager Bar位于表格最下边.默认情况下,分为三部分.如图: 第一部分:导航按钮栏(Navigator) 第二部分:页码栏(Pager) 第三部分:记录信息栏(Record) 要实 ...
随机推荐
- 【高并发】又一个朋友面试栽在了Thread类的stop()方法和interrupt()方法上!
写在前面 新一轮的面试已经过去,可能是疫情的原因吧,很多童鞋纷纷留言说今年的面试题难度又提高了,尤其是对并发编程的知识.我细想了下,也许有那么点疫情的原因吧,但无论面试的套路怎么变,只要掌握了核心知识 ...
- Vue Cli 3 打包上线 部署到Apache Tomcat服务器
使用 npm run build 打包项目 在根目录中有一个dist文件夹 我使用的服务器是 Apache Tomcat 把项目放进tomcat /webapps 中 启动服务器 <mac O ...
- 移动App性能测评与优化1.4.4 多进程应用
1.4.4 多进程应用 根据上一节中的描述,当一个进程结束后,它所占用的共享库内存将会被其他仍然使用该共享库的进程所分担,共享库消耗的物理内存并不会减少.实际上,对于所有共享使用了这个库的应用,Pss ...
- 深入实践Spring Boot1.4 运行与发布
1.4 运行与发布 本章实例工程的完整代码可以使用IDEA直接从GitHub的https://github.com/chen-fromsz/spring-boot-hello.git中检出,如图1-1 ...
- Spring Developer Tools 源码分析:三、重启自动配置'
接上文 Spring Developer Tools 源码分析:二.类路径监控,接下来看看前面提到的这些类是如何配置,如何启动的. spring-boot-devtools 使用了 Spring Bo ...
- 线程状态及各状态下与锁和CPU的关系
线程的状态 Thread.State枚举类型中定义了线程的六种状态:NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING和TERMINATED. 线程在某一时刻只能拥有 ...
- zabbix3.x.x升级教程
1:停掉正在运行的zabbix服务,确保没有新数据写入数据库. /etc/init.d/zabbix_server stop 2:备份原zabbix的数据库数据,以及相关文件. mysqldump - ...
- 如何将MAC的 Terminal 行首变得清爽简洁一点?
作为一位开发人员,MAC带给我们更好的编程体验,Terminal也是经常会去操作的东西,但是说实话,默认的 Terminal 的各种设置,真的让我好难受 刚开始打开,可能看到的会是这样的,行首一大堆东 ...
- 数学--数论--POJ281(线性同余方程)
埃琳娜(Elina)正在阅读刘如家(Rujia Liu)写的书,其中介绍了一种表达非负整数的奇怪方法.方式描述如下: 选择k个不同的正整数a 1,a 2,-,a k.对于一些非负米,把它由每一个我(1 ...
- P4932 浏览器(统计二进制1的个数)
P4932 浏览器 有\(n\)个数,\(x_1,x_2,\cdots,x_n\),问你有多少对\((u,v)\),使得\(x_u\operatorname{xor}x_v\)的二进制表示中有奇数个\ ...