`
willeager
  • 浏览: 92749 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

JS prototype、类、对象、命名空间结合jQuery的理解

阅读更多

 

<script type="text/javascript">
	//-------------prototype对instanceof的影响----------------
	//使用new ABC()得到的东西继承了ABC的 prototype 的属性和方法
	//instanceof 的逻辑:先判断对象属于哪个类,再看那个类的prototype
	//1.没有return
	var jQuery = window.jQuery = window.$ = function( selector, context ) {
	};

	jQuery.fn = jQuery.prototype = {
		init:function(selector, context){
			selector = selector || document;// 确定selector存在
			if (selector.nodeType) {
				this[0] = selector;
				this.length = 1;
				return this;
			}
		}
	}
	var kk = new $(); //kk属于$
	alert(kk instanceof $.fn.init);//false
	alert(kk instanceof $);//true
	alert(kk instanceof Object);//true

	//2.添加return会把new $()对象抛弃  使得var kk = new $(); 和 var kk = $();的效果一致
	var jQuery = window.jQuery = window.$ = function( selector, context ) {
		 return new jQuery.fn.init( selector, context );
	};

	jQuery.fn = jQuery.prototype = {
		init:function(selector, context){
			selector = selector || document;// 确定selector存在
			if (selector.nodeType) {
				this[0] = selector;
				this.length = 1;
				return this;
			}
		}
	}
	var kk = new $(); //kk 属于jQuery.fn.init
	alert(kk instanceof $.fn.init);//true
	alert(kk instanceof $);//fasle
	alert(kk instanceof Object);//true

	//3.设置了prototype后 有没有return结果都一样
	jQuery.fn.init.prototype = jQuery.fn;
	//以下四个东西的内容一致
	alert(jQuery.fn.init);
	alert(jQuery.fn.init.prototype.init);
	alert(jQuery.fn.init.prototype.init.prototype.init);
	alert(jQuery.fn.init.prototype.init.prototype.init.prototype.init);

	//所以 jQuery.fn.init.prototype = jQuery.prototype
	var kk = new $(); //kk 属于jQuery.fn.init 
	alert(kk instanceof $.fn.init);//true
	alert(kk instanceof $);//true
	//-------------prototype对instanceof的影响----------------


	


//第一个括号里面是个匿名函数,第二个括号表示马上执行第一个括号里面的代码。
(function(id){
	
	//-------创建对象------------
	var TE = {}; //相当于TE=new Object();
	alert(typeof Object); //function
	alert(typeof Array);//function
	//Js中特别的一个东西
	alert(typeof Math);//Object	由于prototype只能用于function, Math.prototype这个会导致语法错误

	//如何创建对象
	//1.静态类,只有静态属性和静态方法 不能使用new
	var DI = {
		name:"name",
		sex:"sex",
		age:12,
		dfunc:function(){
			alert('dfunc');
		},
	}
	//使用下面的方法添加静态属性和方法
	DI.n2='n2';
	DI['n3']='n3';
	DI.f2=function(){}
	DI['f3']=function(){}

	
	//2.拥有动态、静态属性以及方法
	//prototype称为类的原型,用来添加类的动态属性和方法,必须通过对象调用
	//以下四种方式添加的都是动态的         
	function ClassTest(){
		//(1).类内部
        this.name1='name1';
		this.func1=function(){
			alert('func1');
		}
		//(2).类内部
		ClassTest.prototype.name2='name2';
		ClassTest.prototype.func2=function(){
			alert('func2');
		}
		//(3).类内部
		this['name3']='name3';
		this['func3']=function(){
			alert('func3');
		}
	}
	var cct = new ClassTest();
  	//(4).类外部
   	ClassTest.prototype.name4='name4';
	ClassTest.prototype.func4=function(){
		alert('func4');
	}
	cct.func4();//执行成功,可见建立了对象后,再使用prototype,已建的对象也生效
	
	//定义类的静态属性和方法,不能通过对象调用,直接使用类名.方法()调用
	ClassTest.staticName='staticName';
	ClassTest.staticFun=function(){
		alert('staticFun');
	};
	ClassTest['staticName2']='staticName2';
	ClassTest['staticFun2']=function(){
		alert('staticFun2');
	};

	alert(typeof ClassTest); //function]
	alert(ClassTest.prototype instanceof Object);//true
	

	var CT = new ClassTest();//创建对象
	alert(typeof CT); //object
	//添加对象属性\方法  
	CT.name5 = 'name5';
	CT.func5 = function(){
		alert('func5');
	}
	CT['name6'] = 'name6';
	CT['func6'] = function(){
		alert('func6');
	}
	//-------创建对象------------


	//---------命名空间-----------------用于理解类、对象与属性之间的关系
	
	window.ClassTest = ClassTest; //window对象的属性ClassTest是个类ClassTest
	window.CT = CT; //window对象的CT属性是个对象CT
	
	alert(typeof window.CT); //object
	alert(typeof window.ClassTest); //function
	
	//这种情况理解为定义了KJ和window.KJ两个变量
	window.KJ={};
	alert(typeof window.KJ); //object
	alert(typeof KJ); //object

	//多层命名空间
	window.CT.CT2=function(){};
	alert(typeof window.CT.CT2);//object
	//---------命名空间-----------------
})(12);


</script>

 

//以下都执行正常,说明cd,ab都是引用?
var cd = ab = {};
ab.func = function(){
	alert(1);
}
cd.func();
cd.f2 = function() {
	alert(2);
}
ab.f2();

 

 this的含义

//---------函数方法中this的意义--------
	var aa = window.aa= function(){
		alert(this);
		alert(this instanceof aa);
		return 1;
	}
	aa(); //[Object window] false
	new aa(); //[Object Object] true

	aa.extend = function(){
		alert(this);
	}
	aa.extend();//aa方法
	new aa.extend();//[Object Object]
	//---------函数方法中this的意义--------
	

 

//类中的this
var obj = {
	func1 = function(){
		alert(this);//只当前的obj对象
	}
}

 

 

 

 

 

 

分享到:
评论

相关推荐

    jquery插件使用方法大全

    使一个Dom对象成为一个Jquery对象很简单,通过下面一些方式(只是一部分): 代码 var a = $("#cid"); var b = $("&lt;p&gt;hello&lt;/p&gt;"); var c = document.createElement("table"); var tb = $(c); 编辑本段代替body...

    jQuery详细教程

    &lt;script type="text/javascript" src="/jquery/jquery.js"&gt; &lt;script type="text/javascript"&gt; $(document).ready(function(){ $("p").click(function(){ $(this).hide(); }); }); &lt;p&gt;If you click on me, I ...

    如何解决jQuery 和其他JS库的冲突

    通常,全局对象都被很好地存储在 jQuery 命名空间里,因此当把 jQuery 和其他 JavaScript 库(例如 Prototype、MooTools 或 YUI)一起使用时,不会引起冲突。 注意:默认情况下,jQuery 用 $ 作为自身的快捷方式。 1...

    解决jquery中美元符号命名冲突问题

    在Jquery中,$是JQuery的别名,所有使用$的地方也都可以使用JQuery来替换,如$(‘#msg’)等同于JQuery(‘#msg’...&lt;/span&gt; script src = ” prototype.js ” type = ” text/javascript ” /&gt; &lt;&lt;/span&gt; script src =

    JQuery的$命名冲突详细解析

    在Jquery中,$是JQuery的别名,...下面以引入两个库文件jquery.js和prototype.js为例来进行说明。 第一种情况:jquery.js在prototype.js之后进行引入,如:[removed] &lt;script src=”jquery.js” type=”text/javascr

    jQuery解决$符号命名冲突

    通过查看引用的js文件,我发现页面中不光引入了jquery.js,还引入了一个名为prototype.js的文件。 这个prototype.js之前未曾听说过,特意在百度上搜了一下,原来它也是一个js类库,功能和jquery差不多,而且很强大。...

    javascript框架设计读书笔记之种子模块

    1.命名空间:  js里面的命名空间就是使用对象的... 但是有一种情况,比如:boke.jsp页面引入了jquery.js以及prototype.js(他们都会在window对象中添加$属性),这时就出现了冲突的情况。  因此jquery.js里面就有了

    蓝色的.zipJQuery插件

    从这个版本开始,jQuery的性能达到了Prototype、Mootools以及Dojo等同类JavaScript库的水平。同年9月,jQuery 1.2版发布,它去掉了对XPath选择符的支持,原因是相对于CSS语法它已经变得多余了。这一版能够对效果进行...

    jquery中$.fn和图片滚动效果实现的必备知识总结

    $.fn是jquery的命名空间,如果对jquery源码有过学习,就不难发现源码中有如下代码: jquery.fn=jquery.prototype={ init:function(selector,context){ /* *code */ } } 所以说jquery.fn也就是jquery.prototype...

    SWFUpload_多文件上传手册.doc

    SWFUpload最初是由Vinterwebb.se开发的一个客户端的上传工具....• 采用了命名空间以兼容其它JS的库 (例如 jQuery, Prototype, 等等) • • 对FLASH 9和FLASH 10播放器的支持(V2.2.0版本放弃了对Flash 8的支持)

    Ajax Upload多文件上传插件

    浏览器迫使我们使用文件输入控件(&lt;input type=”file” /&gt;)做上传,然而此控件的样式是不能修改...Ajax Upload文件上传插件不会污染任何命名空间,所以它与jQuery,Prototypejs,mootools其他JavaScript库兼容。

    小黄瓜.zipJQuery插件

    从这个版本开始,jQuery的性能达到了Prototype、Mootools以及Dojo等同类JavaScript库的水平。同年9月,jQuery 1.2版发布,它去掉了对XPath选择符的支持,原因是相对于CSS语法它已经变得多余了。这一版能够对效果进行...

    php图片异步上传

    浏览器迫使我们使用文件输入控件(”file” /&gt;)做上传,然而此控件的样式是不能修改的。...Ajax Upload文件上传插件不会污染任何命名空间,所以它与jQuery,Prototypejs,mootools其他JavaScript库兼容。

    JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布

    主要集合了我写js时一些常用的方法,并参考了prototype.js,jquery,google,百度,有啊等框架。 工具库已经在近几个效果中使用:JavaScript 多级联动浮动菜单 (第二版) JavaScript 浮动定位提示效果 JavaScript ...

    SWFUpload V2.2.0 说明文档.html

    最新版说明文档--SWFUpload V2.2.0,更新时间:2008-11-07。... * 采用了命名空间以兼容其它JS的库 (例如 jQuery, Prototype, 等等) * 对FLASH 9和FLASH 10播放器的支持(V2.2.0版本放弃了对Flash 8的支持)

    Kalendae日期多选控件Kalendajs-javascript

    独立插件,不依赖第三方插件,比如jQuery、Prototype、Mootools等,只需要你引入插件文件即可使用。 默认主题使用一个图片文件,即上下按钮,所有的其它的效果均有CSS设计完成。 支持兼容现在大多数的浏览器,IE8...

    SwfUpload文件上传

    此为SWFUpload与java集成的文件上传功能实例...采用了命名空间以兼容其它JS的库 (例如 jQuery, Prototype, 等等) 对FLASH 8和FLASH 9播放器的支持 对FLASH 9和FLASH 10播放器的支持(V2.2.0版本放弃了对Flash 8的支持)

    大名鼎鼎SWFUpload- Flash+JS 上传

    采用了命名空间以兼容其它JS的库 (例如 jQuery, Prototype, 等等) 对FLASH8和FLASH9播放器的支持 SWFUpload背后的设计思想和其它基于Flash的上传工具是不同的。它将浏览器的中UI交给开发人员来控制。开发人员能够...

    swfupload批量上传组件

    采用了命名空间以兼容其它JS的库 (例如 jQuery, Prototype, 等等) 对FLASH 8和FLASH 9播放器的支持 对FLASH 9和FLASH 10播放器的支持(V2.2.0版本放弃了对Flash 8的支持) SWFUpload背后的设计思想和其它基于Flash...

Global site tag (gtag.js) - Google Analytics