JavaScript中,關於new的那些事

2021-06-27 21:46:02 字數 1411 閱讀 8394

這篇文章是自己對new學習過程中的一些理解,有不對的地方希望指出,接受組織的批評教育。

導火線,前段時間學習jquery的時候,看到原始碼中有這樣一段:

jquery = function

(selector, context)

短時間內,對於我這種初學者來說,感覺資訊量有點大。第一,jquery.fn是什麼東西;第二,new加上後面那一大串返回什麼;第三,看上是jquery的建構函式,為什麼要這麼折騰。

好,經過一段時間的研究,慢慢來解答。

首先,jquery.fn就是jquery.prototype,相當於給jquery原型弄了個馬甲,看起來短一些。

其次,init方法在jquery的原型中有定義,大概做的幾件事就是:

把selector與context傳給jquery選擇器引擎sizzle建立元素列表

返回jquery例項物件

好,也就是說,不管怎麼折騰,init返回的就是jquery例項物件。接下來看一下某大神對new的乙個說明:

只要new表示式之後的constructor返回(return)乙個引用物件(陣列,物件,函式等),都將覆蓋new建立的匿名物件;如果返回(return)乙個原始型別(無return時其實為return原始型別undefined),那麼就返回new建立的匿名物件。

有了這段解答,那麼,姑且猜測new jquery.fn.init(selector, context)返回的就是jquery物件。

接下來驗證一下,先來**:

function

demo1 ()

}function

demo2 ()

function

demo3 ()

}function

demo4 ()

console.log(

new demo1()); //

object

console.log(new demo2()); //

["bleach"]

console.log(new demo3()); //

function ()

console.log(new demo4()); //

demo4

可以看到執行結果與描述一致,demo1-3都被建構函式的返回值覆蓋了,demo4返回了乙個原始型別,因此new操作之後返回的就是demo4匿名物件。要提一下的是,原始型別指的是string,boolean,number,undefined,null這5類。測試**就不貼出來了。

好了,這下new在背後幹的勾當已經基本弄清了,但是jquery中還有一段定義init.prototype = jquery.fn這就關係到jquery例項方法跟屬性的問題了,具體我就不再表達自己那些淺顯的見解,有高手已經解答

python中例項化 Python中的 new

new 是在新式類中新出現的方法,它作用在構造方法建造例項之前,可以這麼理解,在python 中 存在於類裡面的構造方法 init 負責將類的例項化,而在 init 啟動之前,new 決定是否 要使用該 init 方法,因為 new 可以呼叫其他類的構造方法或者直接返回別的物件來作為本類 的例項。如...

關於javascript 操作游標

版本 dhtml object model 返回值 有 語法 otextrange object createtextrange 引數 無 返回值 otextrange 物件 element 如果成功的話返回被建立的 textrange 物件。說明 為 object 建立 textrange 物件。...

關於 NE弱引用的一些個人理解

首先為什麼要有弱引用 這個問題比較有意思,大家都知道乙個物件有引用就不可能被gc,沒有引用就會被gc,而有一種物件有引用依然會被gc掉,哈哈,是不是有點費解。其實有這麼一種應用 比如我想為了程式需要建立乙個硬碟的所有檔案目錄列表,出於效能考慮這個列表被放置在記憶體中,而程式去作其他事情的時候,把這個...