常見(jiàn)構(gòu)造函數(shù)創(chuàng)建實(shí)例和無(wú)new創(chuàng)建實(shí)例。原文地址
// 無(wú)new創(chuàng)建
function Test() {
// 不能使用 this
return new Object()
}
// new 有神奇的作用
function Test() {}; new Test();
jquery代碼
jQuery = function (selector,context) {
return new jQuery.prototype.init()
}
jQuery.prototype = {
init: function () {
this.name =
return this
},
say: function () {}
}
jQuery.prototype.init.prototype = jQuery.prototype
-
return new 類(lèi)
是為了無(wú)new和隔離各個(gè)實(shí)例 - new作用
- 創(chuàng)建對(duì)象,this指向該對(duì)象
- 在
init
中this
無(wú)法獲取jQuery
上的方法年局,因此原型重定向
小案例分析
$().say()
- 由于返回的是
init
對(duì)象炮车,會(huì)通過(guò)__proto__
查詢(xún)init
的prototype
上有沒(méi)有 -
init
原型上本來(lái)沒(méi)有映屋,由于原型成定向崎岂,它又指向jQuery
上的prototype
- 由于
jQuery
上的prototype
有該方法,所以調(diào)用
鏈?zhǔn)秸{(diào)用
- 方法在必要的時(shí)候返回
this
插件接口
- 使用的是
extend
,因此絮蒿,我們就來(lái)看看extend
函數(shù)
jQuery.extend = jQuery.fn.extend = function () {
// 初始化變量
// 處理各種尊搬,不同參數(shù)導(dǎo)致的問(wèn)題
// 主要邏輯
for () {
// 第一層,循環(huán)各個(gè)source
if () {
// 如果是對(duì)象
for () {
// 第二層土涝,遍歷對(duì)象各個(gè)屬性
if () {
// 如果佛寿,屬性值是對(duì)象或數(shù)組,遞歸
}else {
// 如果但壮,屬性值不是對(duì)象或數(shù)組冀泻,直接賦值
}
}
}
}
// return 改變后的目標(biāo)
}
總結(jié)
- 整體框架,一些偽代碼茵肃,然后細(xì)化