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原始碼進行了一次研究,那時看原始碼的方式基本上是從上往下看,結果看著看著就看不下去了,後來找了乙個很老的版本看,但看的還是不太懂,於是想著乾脆...