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

查看:85
本文介绍了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构造出来的)。

总结一下:

  1. Kodo是对象工厂方法。

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

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

这篇关于javascript - 看到一段JS代码,不懂。请指教?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆