javascript - 看到一段JS代码,不懂。请指教?
大家讲道理
大家讲道理 2017-04-10 17:27:08
[JavaScript讨论组]


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

没看懂..

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(4)
迷茫

首先说一下,这段代码高度模仿了jQuery。里面的Kodo相当于jQuery的$。

第一个箭头:通常我们把某个函数A作为类时,生成它的实例时,都是直接new A。但是jQuery
的设计理念是讨厌new这个关键字的。也就是说,本来你应该用:

p = 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的原型上。

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

ringa_lee

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

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

迷茫

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

高洛峰

仿写jQuery无New操作

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号