分離構造器 2 2

2022-05-03 19:45:09 字數 1191 閱讀 6197

通過new操作符構建乙個物件,一般經過四步:

a.建立乙個新物件

b.將建構函式的作用域賦給新物件(所以this就指向了這個新物件)

c.執行建構函式中的**

d.返回這個新物件

最後一點就說明了,我們只要返回乙個新物件即可。其實new操作符主要是把原型鏈跟例項的this關聯起來,這才是最關鍵的一點,所以我們如果需要原型鏈就必須要new操作符來進行處理。否則this則變成window物件了。

我們來剖析下jquery的這個結構,以下是我們常見的類式寫法:

var $$ = ajquery = function(selector) 

ajquery.fn = ajquery.prototype = ,

constructor: ajquery

}var a = new $$('aaa'); //例項化

a.selectorname() //aaa //得到選擇器名字

首先改造jquery無new的格式,我們可以通過instanceof判斷this是否為當前例項:

var $$ = ajquery = function(selector) 

this.selector = selector;

return this

}

但是注意千萬不要像下面這樣寫:

var $$ = ajquery = function(selector) 

uncaught rangeerror: maximum call stack size exceeded

這樣會無限遞迴自己,從而造成死迴圈並且溢位。

jquery為了避免出現這種死迴圈的問題,採取的手段是把原型上的乙個init方法作為構造器

var $$ = ajquery = function(selector) 

ajquery.fn = ajquery.prototype = ,

constructor: ajquery

}

這樣確實解決了迴圈遞迴的問題,但是又問題來了,init是ajquery原型上作為構造器的乙個方法,那麼其this就不是ajquery了,所以this就完全引用不到ajquery的原型了,所以這裡通過new把init方法與ajquery給分離成2個獨立的構造器。

22 建構函式

本文是在學習js所做的學習筆記,所有筆記內容請看 js學習筆記 doctype html en utf 8 title title 建構函式就是乙個普通的函式,建立方式和普通函式沒有區別,不同的是建構函式習慣上首字母大寫 建構函式和普通函式的區別就是呼叫方式的不同 普通函式直接呼叫,而建構函式需要使...

構造器(構造方法)

知識點 1.乙個類即使什麼都不寫,他也會存在乙個方法 構造器 構造方法 2.構造方法的名字必須與定義他的類名完全相同,沒有返回型別,甚至連void也沒有。3.構造方法的呼叫是在建立乙個物件時使用new操作進行的。構造方法的作用是初始化物件。4.有參構造 一旦定義了有參構造,無參一定要寫出來!pack...

構造器(構造方法)

題目 編寫兩個類 和 test,其中 類中宣告私有的底邊長base和高height,同時宣告公共方法訪問私有變數。此外,提供類必要的構造器。另乙個類中使用這些公共方法,計算三角形的面積。回答 public class test public int a,int b public void setba...