本身近来在进修一些js的插件的写法,那末固然就绕不开jquery,因而本身就进修中碰到的一些题目做些总结和纪录
本身也是在进修过程当中,有题目请列位指出,愿望大伙能多多支撑,给给star,点点赞呗,github地点
jquery也许是如何的
险些一切的js插件都一样,起首肯定是建立一个闭包,也就是自挪用的匿名函数
(function(){
//林林总总的代码
})()
在js中,这模样我们就建立了一个特别的函数作用域,在这个域中的代码不会和已有同名要领,变量发生争执。
我们看看一开始JQ要怎样写,在一步步诠释
(function(window,document){
var Ye = function(selector){
return new Ye.prototype.init(selector);
}
Ye.prototype = {
constructor : Ye,
init:function(selector){
//一些代码
},
//许多的原型属性和要领
}
Ye.prototype.init.prototype = Ye.prototype;
//许多的静态属性和要领
Ye.test = function(){
console.log('可以运用');
}
window.y = Ye;
})(window,document)
这着实就是jq的也许组织了,不过由于jq着实太大,会分许多个模块,然后把上面这个组织模块也包含在一个自挪用匿名函数中。
为何要这么写
起首
var Ye = function(selector){
return new Ye.prototype.init(selector);
}
这个是一个很奇妙的要领,经由过程返回一个原型上init()实例来到达在运用中无需用new来挪用,然后
Ye.prototype = {
constructor: Ye,
length:0,
init:function(selector){
//代码
},
html:function(v){
//一些代码
}
}
Ye.prototype.init.prototype = Ye.prototype;
我们将一些属性和要领写在Ye的prototype中,再用Ye.prototype去掩盖Ye.prototype.init的原型对象,如许我们就可以运用内里的属性和要领了,接下来的重点就在于去组织Ye.prototype了。
在表面
Ye.test = function(){
console.log("可以运用");
}
我们可以写一些静态的要领,如许无需组织一个Ye对象也可以运用,比方y.test();
末了我们经由过程window.y = Ye
来将接口暴露出来,如许在全局就可以运用y来组织Ye对象或是运用属性要领。
接下来我们就只须要想办法在Ye.prototype完成JQ的林林总总的功用了,是否是很轻易。