javascript - 看到一段JS代码,不懂。请指教?
本文介绍了javascript - 看到一段JS代码,不懂。请指教?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
上面两个箭头的地方是什么意思? Kodo的prototype里面函数的prototype 赋值给Kodo的prototype?
没看懂..
解决方案
首先说一下,这段代码高度模仿了jQuery。里面的Kodo相当于jQuery的$。
第一个箭头:通常我们把某个函数A作为类时,生成它的实例时,都是直接new A。但是jQuery
的设计理念是讨厌new
这个关键字的。也就是说,本来你应该用:
div = new $('.box')
来得到一个元素的,但是jQuery为了让API用起来简单,于是省略了new。这样一来就导致了必须要在Kodo函数里面显式地返回一个new出来的对象。那么,应该new谁呢?return new Kodo(...)
肯定不行,因为这会导致死循环。所以只能新构造一个函数作为构造函数来new,这就是代码中的:init
方法。这个方法总要有个地方放吧?是的,挂到了Kodo.prototype
上面。
这样一来,Kodo就成了生成对象的工厂方法,实际的构造函数是init。
第二个箭头:但是,我们要欺骗一下用户,让用户觉得:
用init构造出来的对象,就像是用Kodo构造出来的一样
这怎么办到呢?答案就是第二个箭头指的那个地方。即将Kodo.prototype赋值给init.prototype。这样一来,所有在Kodo原型链上面定义的方法就自动共享给了新new出来的对象(别忘了这些对象实际是用init构造出来的)。
总结一下:
Kodo是对象工厂方法。
init是实际的构造方法。它其实可以随便放到哪儿,只是为了方便而分到了Kodo的原型上。
手机作答,说得比较粗糙。等回家去用电脑细答。
这篇关于javascript - 看到一段JS代码,不懂。请指教?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文