首页 > 看到一段JS代码,不懂。请指教?

看到一段JS代码,不懂。请指教?


上面两个箭头的地方是什么意思? Kodo的prototype里面函数的prototype 赋值给Kodo的prototype?

没看懂..


这是自运行的函数,第一个箭头表示返回一个新的init构造函数的对象,第二个表示把Kodo的原型赋给init函数的原型,即init原型prototype拥有Kode原型下的所有属性和方法,建议不要截图,这样有助于其他人来逐行分析你的代码


首先说一下,这段代码高度模仿了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构造出来的)。

总结一下:

  1. Kodo是对象工厂方法。

  2. init是实际的构造方法。它其实可以随便放到哪儿,只是为了方便而分到了Kodo的原型上。

手机作答,说得比较粗糙。等回家去用电脑细答。


Kodo是一个函数,这个函数返回了Kodo.prototype.init的一个实例。实例拥有Kodo.prototype.init.prototype中所有的属性方法,Kodo.prototype.init.prototype是什么?后面重写了这个原型,等于Kodo的原型。

所以,翻译过来就是:Kodo函数中返回的实例对象拥有Kodo原型中所有的属性方法。


仿写jQuery无New操作

【热门文章】
【热门文章】