24 jQuery——对象的封装、闭包、匿名自调用函数

对象的封装

有使用我们引入的js文件中的对象非常非常多,js一旦变量名重复就会覆盖。为了解决这一问题,我们使用对象封装。

我们引入的js工具(代码)不会覆盖我们自己写的对象。这是因为它使用了封装与闭包。

就好像java中引入的工具,虽然方法名和我们自己写的方法名重复,但并不会覆盖,因为我们在使用引入的方法时,通常在前面类名点方法名的形式。

js也一样。js使用闭包封装好工具,只返回一个函数名,我们使用函数名.对象的方式调用提供的方法即可。

闭包

简单的理解为:函数里面有函数,返回函数中的函数对象。

如:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			function getKnife(){
				var knife={}
				knife.kan = function(){
					alert("我砍")
				}
				knife.ci = function(){
					alert("我刺!")
				}
				return knife
			}
		</script>
		<input type="button" value="砍它" onclick="getKnife().kan()"/>
		<input type="button" value="刺它" onclick="getKnife().ci()"/>
	</body>
</html>

  

好了其它代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 声明js代码域 -->
		<script type="text/javascript">
			function test(){
				alert("我是test")
			}
		</script>
		<script type="text/javascript" src="my.js">	</script>
	</head>
	<body>
		<h3>jQUery的封装原理</h3>
		<hr>
		<input type="button" onclick="test()" value="测试test">
		<ul>
			<li>1.js的全局代码区只有一个:无论是引入的还是html中写的多个js代码块,都会合成一个js文件到内存中</li>
			<li>所以同名变量(函数等)会覆盖。</li>
			<li><input type="button" onclick="xiaohei.test()" value="测试">
			2.使用对象封装,将代码封装到对象中(查看my.js文件中对象:xiaohei),但对象也可以被覆盖,内容全部失效。为了解决这个问题,查看3</li>
			<li><input type="button" onclick="getXiaohei().test()" value="测试">
			3.使用工厂模式,将需要用的东西写到一个函数中(查看my.js文件。但问题并没有完全解决)</li>
			<li>
			4.将封装的函数名去除,引出新问题:	函数没有办法调用,解决方法看5
			</li>
			<li>5.使用匿名自调用,可以再页面加载的时候调用一次,但不能重复调用,解决方法看6</li>
			<li><input type="button" onclick="test()" value="测试">
			6.使用闭包</li>
		</ul>
	</body>
</html>

  

my.js

//声明对象
var xiaohei={}
xiaohei.test = function(){
	alert("我是外部js文件的test函数")
}
//使用工厂模式
function getXiaohei(){
	var xiaohei={}
	xiaohei.test = function(){
		alert("工厂模式的test函数")
	}
	return xiaohei;
}
// 匿名自调用:只能存在一个匿名自调用
(function(){
	alert("匿名自调用")
	return "你好";
})()

//使用闭包
// (function(obj){
// 	obj.test = function(){
// 		alert("我是闭包创建的test");
// 	}
// }
// )(window)
//传window对象,当这个匿名函数执行时,window获得一个test对象

  

原文地址:https://www.cnblogs.com/Scorpicat/p/12248231.html

时间: 2024-08-29 21:54:40

24 jQuery——对象的封装、闭包、匿名自调用函数的相关文章

jQuery对象与DOM对象之间的转换

什么是DOM对象 使用JavaScript中的方法获取页面中的元素返回的对象就是dom对象.比如使用document.getElement*系列的方法返回的就是dom对象. var btn = document.getElementById("btnShowDiv"); var divs = document.getElementsByTagName("div"); dom对象只可以使用dom对象的方法和属性 domObject.innerHTML = "

JavaScript之jQuery-9 jQuery 开发插件(添加新全局函数、添加jQuery对象方法、添加新简写方法、方法参数)

一.添加新的全局函数 全局函数 - 全局函数,实际上就是jQuery对象的方法,从实践角度看,它们是位于jQuery命名空间内部的函数 - jQuery内置的某些功能是通过全局函数实现的 - $.ajax()函数就是典型的全局函数 - 向jQuery命名空间添加一个函数,只需要将这个新函数指定为jQuery的一个属性值   - 如果要使用该全局函数时,可通过一下代码调用 - 也可以通过别名来调用 添加多个函数 - 如果我们想在插件中提供多个全局函数,可以独立的声明这些函数   - 还可以使用$.

js中自调用函数(一次性函数)

1.函数的自调用---自调用函数 //函数的自调用 //一次性函数 (function (){ console.log("一次性"); })(); (function(win){ var num=20; win.num=num; })(window); //把局部变量给父类就可以了 console.log(num); 2.通过自调用函数产生一个随机数对象,在自调用函数外面,调用该随机数对象方法产生随机数 //通过自调用函数产生一个随机对象 (function(window){ //产生

JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块

JAVA之旅(四)--面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块 加油吧,节奏得快点了 1.概述 上篇幅也是讲了这点,这篇幅就着重的讲一下思想和案例 就拿买电脑来说吧,首先,你不懂电脑,你去电脑城买电脑,和大象装冰箱里一样,是什么步骤?咨询 砍价 ,谈妥了就那电脑走人,对吧,这就是面向过程的思想,而面向对象是:你有一个哥们,他懂电脑,什么都会,你只要带他去,就行,你这个哥们就是对象,在JAVA中,我们就是操作一个对象去完成各种各样的操作的,这就是面向对

使用DOM的方法获取所有li元素,然后使用jQuery()构造函数把它封装为jQuery对象

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta ht

在JavaScript中重写jQuery对象的方法

jQuery是一个很好的类库,它给我们解决了很多的客户端编程,任何东西都不是万能的,当它不能满足我们的需求时我们需要对它进行重写,同时也不要影响其原有的功能或者修改其原有的功能:我现在的web应用程序大多数时候的数据交互都是通过Ajax来完成的,这样就可以将一些隐藏字段的数据保存在HTML标签的属性中,使HTML标签的代码量减少,如:ID,Timestamp等等,这些不需要用户输入但又不得不提交的字段,通过表单提交的做法是 <input name="ID" value="

jquery 源码学习(四)构造jQuery对象-工具函数

jQuery源码分析-03构造jQuery对象-工具函数,需要的朋友可以参考下. 作者:nuysoft/高云 QQ:47214707 EMail:[email protected] 声明:本文为原创文章,如需转载,请注明来源并保留原文链接. 读读写写,不对的地方请告诉我,多多交流共同进步,本章的的PDF等本章写完了发布. jQuery源码分析系列的目录请查看 http://nuysoft.iteye.com/blog/1177451,想系统的好好写写,目前还是从我感兴趣的部分开始,如果大家有对哪

jQuery源码分析-02构造jQuery对象

源码结构.核心函数和工具函数 1.源码结构 (function( window, undefined ) { var jQuery = (function() { // 构建jQuery对象 var jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context, rootjQuery ); } // jQuery对象原型 jQuery.fn = jQuery.prototype = {

一步一步学习 JQuery (一) JQuery 对象

jQuery 是继 Prototype 之后又一个优秀的 JavaScript 库 jQuery 理念: 写得少, 做得多. 优势如下: 轻量级 强大的选择器 出色的 DOM 操作的封装 可靠的事件处理机制 完善的 Ajax 出色的浏览器兼容性 链式操作方式 JQuery:Hello World <html> <head> <meta charset="UTF-8"> <title>Insert title here</title&