关于扩展方法和函数调用的优先级

关于扩展方法和函数调用的优先级

$.fn.extend({

dropdown: function(){

return this.each(function() {

dropdown(this);

});

}


});

$('.dropdown').dropdown();这行代码中的dropdown()会先查找原型链上有没有这个方法,有就调用原型链上的,没有就调用js中定义的函数,这里用extend把方法绑定在了原型链上,所以执行extend里面的dropdown方法。结论:原型链上的方法优先级高于js中写的同名函数,两个同名但不覆盖,因为一个在对象的原型链上,理解成所属的作用域不同,这个理解对吗?

然后就是原型链上的dropdown(this),这里为什么调用了js定义的函数dropdown(),按照原型链上的方法优先级高于js中写的函数,那么应该会自身调用自身啊?就是这里感觉很绕


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,理解的有点偏,可以根据以下说明,整理一下自己的思路:

$.fn.extend() 方法是为jQuery扩展方法,它会将方法添加在jquery的原型上:

http://img1.sycdn.imooc.com//climg/5ecdf15b09fe885f05380296.jpg

然后jq对象就可以直接调用该方法了,如下:

http://img1.sycdn.imooc.com//climg/5ecdf1610976f79403950088.jpg

由于该方法内部,调用了js中的dropdown,所以会继续执行js中的dropdown方法,如下:

http://img1.sycdn.imooc.com//climg/5ecdf169090bca9707190561.jpg

关于this的指向,可以参考如下:

http://img1.sycdn.imooc.com//climg/5ecdf171097fc55b08380425.jpg

如果我的回答帮到了你,欢迎采纳,祝学习愉快!

  • 王文辉 提问者 #1
    抱歉抱歉,昨晚弄糊涂了,因为在jq原型链上右dropdown方法,同时在function也有一个dropdown方法,所以自己弄出了一个优先级的概念,其实是不存在的。函数的调用是调用函数名,直接写dropdown(参数)即可调用,原型链上的方法,是一个属性名,要用对象.属性的方法调用,写成$(jq元素).dropdown()。
    2020-05-27 13:14:53
  • 好帮手慕久久 回复 提问者 王文辉 #2
    同学你好,这样理解是正确的,祝学习愉快!
    2020-05-27 13:31:24
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师