由此jQuery源码学习javascript,源码学习

2019-08-03 16:20 来源:未知

Jquery这么广泛,必有它过人之处,通过开源代码进行学习,是个科学的学习情势啊!

新近在做日志总括程序,开采对方的顺序是在Jquery基础上进展付出的,而商场的网址的框架是prototype。并且小编也早就想打听一下Jquery源码,故决定商量Jquery源码,模拟它的法子

以下是本身模拟的诀窍,作者尽恐怕简化方法。

 

概念对象C(类似于jquery的$方法)——那些也是jquery设计丰裕抢眼的地点

Jquery这么布满,必有它过人之处,通过开源代码实行学习,是个正确的上学方法啊!

复制代码 代码如下:

以下是自小编模拟的艺术,小编竭尽简化方法。

(function(){
var
_cQuery = window.cQuery,
cQuery = function(){
return new cQuery.fn.init();
};
cQuery.fn = cQuery.prototype = {
init : function () {
         console.log(this);
return this;
},
test : function () {
console.log('test');
}
韦德娱乐1946网页版,};
cQuery.fn.init.prototype = cQuery.fn;
window.C = window.cQuery = cQuery;
})();

概念对象C(类似于jquery的$方法)——那几个也是jquery设计丰富神奇的地点

C().test();

复制代码 代码如下:

出口结果

(function(){
var
_cQuery = window.cQuery,
cQuery = function(){
return new cQuery.fn.init();
};
cQuery.fn = cQuery.prototype = {
init : function () {
         console.log(this);
return this;
},
test : function () {
console.log('test');
}
};
cQuery.fn.init.prototype = cQuery.fn;
window.C = window.cQuery = cQuery;
})();

韦德娱乐1946网页版 1

C().test();

代码深入分析

出口结果

1、把cQuery注册到window属性中,当成全局变量使用。用C做为简易名称。

韦德娱乐1946网页版 2

window.C = window.cQuery = cQuery;

代码深入分析

2、
cQuery.fn.init.prototype = cQuery.fn;
  拿图说话(打字与印刷当前目的cQuery):

1、把cQuery注册到window属性中,当成全局变量使用。用C做为简易名称。

去掉该句截图。  

window.C = window.cQuery = cQuery;

韦德娱乐1946网页版 3

2、
cQuery.fn.init.prototype = cQuery.fn;
  拿图说话(打字与印刷当前指标cQuery):

填上此句截图:

去掉该句截图。  

韦德娱乐1946网页版 4

韦德娱乐1946网页版 5

难点剖析:原型传递
  init的原型只是如今的函数。 
韦德娱乐1946网页版 6
  用cQuery.fn.init.prototype = cQuery.fn;覆盖init构造器的原型对象,进而达成跨域访谈。
评估:
  那是一招妙棋,new cQuery.fn.init()创制的新对象具备init构造器的prototype原型对象的方式,通过转移prototype指针的指向,使其针对性cQuery类的prototype。——那样创设出来的指标就连续了cQuery.fn原型对象定义的办法。
  3、用一个var定义变量,函数。Jquery源码里用了79行定义了层层的变量(在起来部分)。

填上此句截图:

韦德娱乐1946网页版 7

韦德娱乐1946网页版 8

each方法

难点解析:原型传递
  init的原型只是如今的函数。 
韦德娱乐1946网页版 9
  用cQuery.fn.init.prototype = cQuery.fn;覆盖init构造器的原型对象,进而达成跨域访谈。
评估:
   那是一招妙棋,new cQuery.fn.init()创立的新对象具备init构造器的prototype原型对象的法子,通过转移prototype指针的指向,使其针对性 cQuery类的prototype。——那样创设出来的对象就再三再四了cQuery.fn原型对象定义的点子。
  3、用八个var定义变量,函数。Jquery源码里用了79行定义了连串的变量(在起来部分)。

复制代码 代码如下:

韦德娱乐1946网页版 10

(function(){
var
_cQuery = window.cQuery,
cQuery = function(){
return new cQuery.fn.init();
};
cQuery.fn = cQuery.prototype = {
init : function () {
return this;
},
each : function(obj, callback) { // each 方法
var name, length = obj.length;
for (name in obj) {
if (callback.call(obj[name], name, obj[name]) === false) {
break;
}
}
},
isWindow : function(obj) {
return obj != null && obj == obj.window;
}
};
cQuery.fn.init.prototype = cQuery.fn;
window.C = window.cQuery =cQuery;
})();

each方法

C().each({ Height : 'height', Width : 'width'}, function(name, type){ console.log(this, name, type); });

复制代码 代码如下:

输出结果
韦德娱乐1946网页版 11
困难深入分析:callback.call(obj[name], name, obj[name])
callback是function(name, type){ console.log(this, name,type);}那几个艺术
第一个obj[name]是"height“或"width"字符串,是callback函数里的this。
name,第二个obj[name]是传给callback的参数。

(function(){
var
_cQuery = window.cQuery,
cQuery = function(){
return new cQuery.fn.init();
};
cQuery.fn = cQuery.prototype = {
init : function () {
return this;
},
each : function(obj, callback) { // each 方法
var name, length = obj.length;
for (name in obj) {
if (callback.call(obj[name], name, obj[name]) === false) {
break;
}
}
},
isWindow : function(obj) {
return obj != null && obj == obj.window;
}
};
cQuery.fn.init.prototype = cQuery.fn;
window.C = window.cQuery =cQuery;
})();

isWindow()方法
在上边代码的根基上,实行编写制定:

C().each({ Height : 'height', Width : 'width'}, function(name, type){ console.log(this, name, type); });

复制代码 代码如下:

输出结果
韦德娱乐1946网页版 12
难题解析:callback.call(obj[name], name, obj[name])
callback是function(name, type){ console.log(this, name,type);}那个艺术
第一个obj[name]是"height“或"width"字符串,是callback函数里的this。
name,第二个obj[name]是传给callback的参数。

isWindow : function(obj) {
return obj != null && obj == obj.window;
}

isWindow()方法
在下边代码的根底上,实行编辑:

调用:

复制代码 代码如下:

复制代码 代码如下:

isWindow : function(obj) {
return obj != null && obj == obj.window;
}

console.log(cquery.isWindow(window));
console.log(cquery.isWindow(document));

调用:

出口结果

复制代码 代码如下:

韦德娱乐1946网页版 13

console.log(cquery.isWindow(window));
console.log(cquery.isWindow(document));

window对象有八个杰出的属性window,等价于 self 属性,它涵盖了对窗口自己的援用。通过那几个本性决断是不是是window对象!

出口结果

总结
  笔者也是刚开首研讨。大概有一点地点说的不是很明亮,纵然有人能给自己补偿,那再好可是了。
  时间不早了,下回再接着探究。

韦德娱乐1946网页版 14

你恐怕感兴趣的稿子:

  • jQuery源码解读之hasClass()方法深入分析
  • jQuery源码解读之removeAttr()方法深入分析
  • jQuery源码分析之jQuery.fn.each与jQuery.each用法
  • 从JQuery源码解析JavaScript函数的apply方法与call方法
  • jQuery源码解析之jQuery中的循环技艺详解
  • 透过jQuery源码学习javascript(三)
  • 经过jQuery源码学习javascript(二)
  • jQuery中addClass()方法用法实例
  • Jquery.addClass始终无效原因分析
  • jQuery源码解读之addClass()方法剖判

window对象有一个新鲜的性质window,等价于 self 属性,它饱含了对窗口本身的援用。通过那些特性决断是不是是window对象!

总结
  笔者也是刚开始研讨。恐怕有一些地点说的不是很驾驭,假设有人能给本身补偿,那再好但是了。
  时间不早了,下回再接着研讨。

TAG标签: 韦德娱乐1946
版权声明:本文由韦德娱乐1946_韦德娱乐1946网页版|韦德国际1946官网发布于韦德娱乐1946网页版,转载请注明出处:由此jQuery源码学习javascript,源码学习