<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对象
}
}
分享到:
相关推荐
这里的`$.fn`是jQuery对象的prototype,实际上就是`jQuery.prototype`,这样我们就可以在任何jQuery选择器后直接调用`myPlugin`方法,如`$('selector').myPlugin()`。 命名空间在jQuery插件中起着关键作用,因为它...
`jQuery.fn`和`jQuery.prototype`指向同一个对象,这使得所有jQuery对象都能够共享相同的方法和属性。其中`init`方法负责处理不同的`selector`参数,并返回一个包含所选元素的jQuery对象。 #### 四、处理不同的`...
Prototype的命名空间管理机制避免了全局变量污染,提高了代码的可读性和可维护性。 在手册中,你将了解到如何利用Prototype创建和操作DOM元素,如查找、添加、删除和修改HTML元素。Prototype提供了简洁的链式调用...
2. **构造函数与命名空间**: jQuery定义了一个构造函数,同时通过`window.$ = jQuery;`将jQuery绑定到全局变量`$`,方便外部调用。这样,开发者可以通过`$`或`jQuery`来访问和使用jQuery的功能。 3. **原型链扩展...
ECSHOP是一个流行的开源电商系统,它使用了 Prototype.js 作为默认的JavaScript库,而jQuery是另一个广泛应用的JS库。在尝试将ECSHOP与使用jQuery的插件或功能集成时,可能会遇到`transport.js`和`jquery`的冲突问题...
Prototype.js 是一个广泛使用的JavaScript库,它扩展了JavaScript语言的功能,为开发人员提供了更强大的面向对象编程支持。该库的核心特性是其对JavaScript原型(prototype)机制的深入利用,使得JavaScript对象的...
整个jQuery库被包裹在一个立即执行的匿名函数中,这样可以确保其中定义的所有函数和对象只在这个作用域内可见,起到了类似命名空间的效果。同时,jQuery将其自身和$符号绑定到window对象,使得用户可以在全局范围内...
在给定的标题"JavaScript libraries--->jQuery, Prototype, Mootools, YUI, Extjs, Dojo"中,提到了五种著名的JavaScript库:jQuery、Prototype、Mootools、YUI和ExtJS。这些库都有各自的特性和优势,下面将详细介绍...
Prototype.js是一款强大的JavaScript库,由Sam Stephenson开发,旨在简化JavaScript的编程,提供了一系列实用的函数和类扩展,增强了JavaScript的基本功能。这款库的核心理念是通过类原型(Class Prototyping)实现...
- jQuery对象是jQuery库中的封装对象,可以执行jQuery特有的方法;DOM对象是原生JavaScript的对象,用于操作HTML元素。两者之间可以通过`.get()`和`$(...)`进行相互转换。 4. **同时使用 prototype 和 jQuery** -...
`$.fn`是jQuery对象的别名,代表了原型链`jQuery.prototype`。 - 插件内部应封装所有功能,避免污染全局作用域。 3. **参数传递** - 插件可以通过传递参数来自定义其行为。这些参数可以在调用插件时提供,如`$('...
类级别的插件可以添加到jQuery的命名空间中,而对象级别的插件则为jQuery对象增加了可调用的方法。开发者可以通过全局函数添加、命名空间封装、立即执行函数表达式以及插件命名等方式来构建插件。这不仅提高了代码的...
对象级别的插件开发是指给jQuery对象添加方法。这些方法通常用于操作DOM元素。 **2.1 在JQuery名称空间下声明一个名字** 可以使用`.extend()`方法或直接定义方法的方式: **形式1**: ```javascript (function($...
`$.fn` 是 jQuery.prototype 的别名,扩展它意味着可以将新的方法应用到所有jQuery对象上。 3. **初始化和配置**: 在主函数内,可以处理用户传递的参数,设定默认值,并对选中的元素进行操作。 4. **编写插件...
首先,我们需要明白在JavaScript中,类是一种语法糖,实际上它是基于原型(prototype)的面向对象编程。ES6引入了`class`关键字,使得代码更加简洁易读,但其底层仍然是基于函数和原型操作。因此,理解函数和原型是...
例如,jQuery和Prototype都是非常流行的JavaScript框架,但它们的使用方式和变量命名可能会导致冲突。今天,我们就来讨论如何解决jQuery与Prototype并存的冲突问题。 首先,我们需要了解为什么jQuery和Prototype会...
Prototype.js是一个广泛使用的JavaScript库,它提供了许多实用的函数来扩展JavaScript的基本对象和类。而ecside2可能是另一个JavaScript库或工具,其原始设计可能依赖于Prototype.js,但现在我们希望在不依赖...