第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

關于jquery源碼分析中一段的疑惑?

關于jquery源碼分析中一段的疑惑?

紫衣仙女 2018-09-05 09:09:10
var aQuery = function(selector, context) {       return  new aQuery.prototype.init(); } aQuery.prototype = {     init: function() {        return this;     },     name: function() { };上面這個代碼,根據測試,aQuery.prototype.init()最后返回的應該是aQuery.prototype本身,那么aQuery()最后返回的可以說是new的init的一個實例,也可以當成是aQuery.prototype的一個實例?var aQuery = function(selector, context) {       } aQuery.prototype = {    init: function() {        return this;     },    name: function() { alert("hi")}, };console.log(new aQuery.prototype)這個卻顯示aQuery.prototype不是一個constructor,反而aQuery.prototype.init()倒是可以new,兩者不是一樣的嗎
查看完整描述

1 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

  1. jq的這種寫法是為了省略一個new
      jq的這個$符號其實就是它本身的構造函數的名字。但是在使用jq的時候,都是直接$(...),沒有見過誰這么寫的new $(...),這就是jq這種寫法帶來的結果。

  2. 具體來說,在jq的基本結構中,你還少了一句很關鍵的語句,那就是——

    $.prototype.init.prototype = $.prototype;

    $.prototype.init也是一個構造函數,那么創(chuàng)建出來的實例也是有原型方法的,在使用了上面這句話之后,用new $.prototype.init出來的對象就能夠使用$本身prototype中的實例方法了。

  3. 這種寫法其實很別扭,要是直接這樣,會更好理解一點:

    var $ = function(selector, context) {    return  new fn(selector, context);
    }function fn(selector, context) {
        ...
    }
    fn.prototype = {
        ...
    }

      不過jq誕生的年代還沒有現在這種模塊化js編程的理念,直接在標簽里面用文件引用的話,當然會想辦法盡量把變量的數量壓制到最少。要是現在的話,直接export { $ }就行了,中間多余那么多變量也沒問題。


查看完整回答
反對 回復 2018-09-30
  • 1 回答
  • 0 關注
  • 543 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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