EXT 原始碼學習與研究 一

2021-08-30 22:31:37 字數 3603 閱讀 6424

ext 原始碼學習與研究(一)

1. 介面卡

ext 原來是yahoo yui js的乙個擴充套件, 依賴yui的底層**來處理跨瀏覽器問題. 目前,使用者可選擇第三方實現或ext來適配. 當然, 用ext是最佳選擇.

2. 核心

核心是構建於適配之上的底層**.

3. 作用域

這說明函式定義在哪並不重要.它可以隨時切換呼叫者.因此, 在乙個函式內使用this是要相當小心的. 它可以是o1也可以是o2,這要看你怎麼調了.

函式中this通常是函式的呼叫者,而物件塊this是物件自己.

注意: js是沒有類,只有物件和函式.

4. delete

它只能刪除物件的屬性.

有些物件的屬性是不能刪除的,比如 window.undefined;原型鏈屬性.

有些則是可以刪除的,比如ext.version.

注意: 刪除的屬性若沒有定義,也會成功返回true.

因此,對於undefined型別,有三種運算子是支援的.

a: typeof a

b: delete a

c: a = 1

5.prototype & constructor

alert(object.prototype == {}); // [object object] false

alert(object.constructor); // function function()

alert(function.prototype == (function(){})); // function prototype() false

alert(function.constructor); // function function()

alert(string.prototype == ''); // '' true

alert(string.constructor); // function function()

alert(boolean.prototype == false); // false true

alert(boolean.constructor); // function function()

alert(number.prototype == 0); // 0 true

alert(number.constructor); // function function()

alert(ext.prototype == undefined); // undefined true

alert(ext.constructor); // function object()

alert(date.prototype == new date(0)); // [19700101] true

alert(date.constructor); // function function()

每種型別的原型都是不同的,建構函式也是不同的.自定義物件若原型為undefined,則它的建構函式預設是 object.prototype.constructor.

object.prototype 就是真正的基物件.它似乎沒有任何屬性,但它不是{},也不是global物件.

function.prototype 是乙個prototype 函式,它不返回任何值.

function.constructor 也是乙個函式, 它實際上就是function物件本身.所有建構函式預設是function.

不只這樣,函式原型的構造器也是function.

6.此方法將config,defaults的屬性全部複製到obj物件中. config覆蓋defaults的同名屬性.

7.ext.extend(subobject, supobject, overides);

ext.extend(supobject, overides);

繼承.通過原型鏈來操作父類原型上的屬性,同時可以覆蓋父類原型上的屬性.

將子類的原型指向父類的原型.

參考:[url]

8.ext.override(overrideobj, overrides)

覆蓋或重寫

將物件原型上的方法進行重寫.

9.ext.namespace(...)

建立多個命名空間,命名空間用來限制變數的作用域.

此方法只返回最後的字串建立的命名空間.

var o = ext.namespace('tangliang', 'tangliang.ns');

alert(o == tangliang);

alert(o == tangliang.ns);

上面的**相當於:

tangliang = {};

tangliang.ns = {};

10.核心語法

定義匿名函式並執行

(function())();

// 為什麼要這樣寫,而不是直接寫到頂層? 可能是與作用域有關係.

11. 型別轉換

// 字串轉換成布林型

iselement : function(v)

// 字串轉換成陣列

"abc".match(/./g); //[a,b,c]

// 字串轉換成數字

parseint('077'); // 77

// 數字轉換成字串

tostring(77); // '77'

// 字串轉換成日期

new date(yyyy/mm/dd);

// 取當前時間

new date();

// 取1970/01/01

new date(0);

12.createinterceptor

函式注入(before)

func.createinterceptor(funcinterceptor, this);

funcinterceptor();

// before of func exec funcinterceptor,

// if return [boolean true] exec func.

13.useshims

遮罩14.

核心語法

var o =

}o.fname();

15.=

var a, b, c;

// 等價於 c = (false || 0) = 0; b = (c = false || 0) = 0; a = (b = c = false || 0) = 0

a = b = c = false || 0;

// 等價於 alert(c);

alert(a, b, c);

16.

// 獲取函式形參數量,實參數量

var add = function(a, b)

alert(add(1));

cita 原始碼研究

適用環境 vim youcompleteme使用 github 源,不能使用 ustc 源 git clone depth 1 recusive所有 cargo.toml 中的庫版本號全部改為精確的細版本號,不能是粗略的大版本號 所有 cargo.toml 中的非官方託管庫,均改為 形式 第 2 3...

freemarker入門例項與原始碼研究準備工作

log4j.rootlogger debug,a1,a2 指定log輸出目的,這裡設為輸出日誌到指定目錄的檔案my.log中 指定日誌資訊的格式 把a2輸出到控制台 首先在專案中建立存放模板的資料夾templates,然後放入模板檔案person.ftl,內容如下 hello,my name is ...

jQuery原始碼研究 怎麼看原始碼

這幾天有想看原始碼的想法,於是就開始了原始碼的研究,經過幾天的摸索發現看原始碼還是有點技巧在裡面的,想著把這些東東寫下來作為乙個小總結。在乙個多月前我對vue原始碼進行了一次研究,那時看原始碼的方式基本上是從上往下看,結果看著看著就看不下去了,後來找了乙個很老的版本看,但看的還是不太懂,於是想著乾脆...