亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

jquery插件里$(this)和this的問題?

jquery插件里$(this)和this的問題?

蝴蝶不菲 2019-02-06 09:06:41
兩個問題:1、jquery插件的寫法,網上查到有兩種第一種:(function ($) {$.fn.pluginName(opt) {// Our plugin implementation code goes here. }})(jQuery);第二種(function($){ $.fn.extend({ pluginName:function(opt,callback){ // Our plugin implementation code goes here. } }) })(jQuery); 請問這兩張有什么區別? 貌似第一種用的人多,但我看jq源碼中是第二種——————————————————————————————————————————2、$(this)和this的問題(function ($) {$.fn.pluginName(opt) {alert(this===$(this)); //這里的this和$(this)指的都是jquery對象吧? 用的時候寫哪個都不會出問題, 但是會彈出false 為什么?}})(jQuery);
查看完整描述

3 回答

?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

  1. $.fn.pluginName = function(opt){}

    就是為jquery的prototype定義了函數, 這樣, 任何一個jquery對象都可以使用這個成員函數, 這種寫法直觀明了, 你只要知道的就是$.fn = jQuery.prototype = $.prototype

  2. $.fn.extend, 在jquery中重新定義了extend的使用方法, 如果只有一個參數, 那么就是擴展本身, 即$.fn.extend({}), 就是用{}對象擴展$.fn, 也就是jquery的prototype, 這樣, 和上面那個就一樣了

    兩者沒有什么區別, 怎么用看自己習慣和理解

  3. 還有一種寫法就是$.extend($.fn, {}); 這個extend不是一個參數, 它作用是用后面的擴展前面的, 即用{}擴展了$.fn, 還是一個意思

  4. 關于$(this)和this, 你關鍵還是要知道this表示的是什么, 如果this是一個dom元素, 那么$(this)是一個jquery元素, 如果this是一個jquery元素, 那么$(this)還是一個jquery元素, 雖然你用==去判斷兩者是不同的, 但是他們內容都是一樣的, 這是我的經驗, 我并沒有去深入看過源碼, jquery的api中似乎也沒有說這個.

  5. 關于this和$(this)還要注意一點$('.abc').click(function(){});中this是dom元素, $(this)是jquery元素, 而寫插件的時候, 由于是擴展prototype, 所以this就是對象實例, 即this就是jquery對象, $(this)還是jquery對象, 他們雖然不是同一對象, 但是內容是完全相同的


查看完整回答
反對 回復 2019-03-19
  • 3 回答
  • 0 關注
  • 631 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號