上面两个箭头的地方是什么意思? Kodo的prototype里面函数的prototype 赋值给Kodo的prototype?
没看懂..
Kodo
是一个函数,这个函数返回了Kodo.prototype.init
的一个实例。实例拥有Kodo.prototype.init.prototype
中所有的属性方法,Kodo.prototype.init.prototype
是什么?后面重写了这个原型,等于Kodo
的原型。
所以,翻译过来就是:Kodo
函数中返回的实例对象拥有Kodo
原型中所有的属性方法。
这是自运行的函数,第一个箭头表示返回一个新的init构造函数的对象,第二个表示把Kodo的原型赋给init函数的原型,即init原型prototype拥有Kode原型下的所有属性和方法,建议不要截图,这样有助于其他人来逐行分析你的代码
9 回答9.8k 阅读
4 回答8.4k 阅读✓ 已解决
7 回答10.4k 阅读
5 回答8.6k 阅读
2 回答10.8k 阅读✓ 已解决
6 回答2k 阅读
4 回答11.6k 阅读
首先说一下,这段代码高度模仿了jQuery。里面的Kodo相当于jQuery的$。
第一个箭头:通常我们把某个函数A作为类时,生成它的实例时,都是直接new A。但是jQuery
的设计理念是讨厌
new
这个关键字的。也就是说,本来你应该用:来得到一个元素的,但是jQuery为了让API用起来简单,于是省略了new。这样一来就导致了必须要在Kodo函数里面显式地返回一个new出来的对象。那么,应该new谁呢?
return new Kodo(...)
肯定不行,因为这会导致死循环。所以只能新构造一个函数作为构造函数来new,这就是代码中的:init
方法。这个方法总要有个地方放吧?是的,挂到了Kodo.prototype
上面。这样一来,Kodo就成了生成对象的工厂方法,实际的构造函数是init。
第二个箭头:但是,我们要“欺骗”一下用户,让用户觉得:
这怎么办到呢?答案就是第二个箭头指的那个地方。即将Kodo.prototype赋值给init.prototype。这样一来,所有在Kodo原型链上面定义的方法就自动共享给了新new出来的对象(别忘了这些对象实际是用init构造出来的)。
总结一下:
Kodo是对象工厂方法。
init是实际的构造方法。它其实可以随便放到哪儿,只是为了方便而分到了Kodo的原型上。
手机作答,说得比较粗糙。等回家去用电脑细答。