关于JQuery的那些事(无new构造)

JQuery,作为风靡一时的前端框架,其设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它是具有良好的dom操作性能,被前端工程师所喜爱,JQuery是js封装起来的类库,也属于前段框架,今天就一起看看jq的核心技术之无new构造思想

先实例化一个对象

function JQ(str){
}
JQ.prototype = {
}
new JQ("div")

通常我们都是在外面new,也就是实例化,new实现的是一个this指向的转变,如果没有new,那构造函数内部this指向的就是window,那么原型链就挂载在window上面了,但是每次都new也很麻烦,怎么才能一次实现多次调用无new的函数呢,JQuery就实现了由显式new变成隐式new的过程

function JQ(str){
	return new JQ(str)
}
JQ.prototype = {
}
JQ("div")

这里确实无new构造了,但是很明显,死循环了,如何写一个正确的无new构造呢?

function JQ(str){
	return new JQ.init(str)
}
JQ.prototype = {
	init:function(str){
	}
}
JQ("div")

JQ把函数实例化的过程交给它旗下的init()主方法来做,但是也有问题,就是init作为主方法,却无法访问JQ函数的原型上的属性或者方法,因为他的this指向自己,而不是JQ(),巧妙地点来了,既然可以改new的过程,不如把this也改了?

function JQ(str){
	return new JQ.init(str)
}
JQ.prototype = {
	init:function(str){
	}
}
JQ.prototype.init.prototype = JQ.prototype
JQ("div")

这里把init的this重新赋值,让它得以访问JQ的原型,再思考一番,就是形成一个循环,看到这里,我们不得不感叹JQuery的厉害,如果有对原型不太熟悉的同学,还有一种隐式new的方法:

function Fn(str){
}
Fn.prototype = {
}
function JQ(str){
	return new Fn(str);
}
JQ("div")

相当于加了一个连通器,省去一个new,让JQ执行new并且把值返回出来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值