EXTソース学習と研究(一)


EXTソース学習と研究(一)
1.
アダプタ
EXTはもともとYahoo YUI JSの拡張であり、YUIの下位コードに依存してブラウザ間の問題を処理していた.現在、ユーザは、サードパーティ製インプリメンテーションまたはEXTを選択して適合することができる.もちろん、EXTを使うのがベストです.
2.
コア
コアは、適合上に構築する最下位コードである.
3.
アクティブドメイン

var o1 =
{
    fVar : 15,
    fMethod : function(){
        alert('o1 ' + this.fVar);
    }
}

var o2 =
{
    fVar : 16,
    fMethod : function(){
        alert('o2 ' + this.fVar);
    }
}

//  o2       ,this=o1
o1.fMethod();  // o1 15

//  o2       ,this=o2
o1.fMethod.apply(o2);  // o1 16

これは、関数の定義がどこにあるかが重要ではないことを示す.呼び出し元をいつでも切り替えることができます.したがって、1つの関数内でthisを使用するにはかなり注意しなければならない.それはo 1でもo 2でもいいです.これはあなたがどのように調整するかによって決まります.
関数のthisは通常関数の呼び出し者であり、オブジェクトブロックthisはオブジェクト自体である.
注意:JSはクラスがなく、オブジェクトと関数しかありません.
4.
delete
オブジェクトのプロパティのみ削除できます.
Windowsなどのオブジェクトのプロパティは削除できません.undefined;プロトタイプチェーン属性
一部は削除できます.例えばExt.versionです.
注意:削除した属性が定義されていなければ、TRUEに正常に戻ります.
従って、undefinedタイプについては、3つの演算子がサポートする.
a: typeof a
b: delete a
c: a = 1
5.
prototype & constructor

alert(Object.prototype == {}); // [object Object]       false
alert(Object.constructor); // function Function(){ native code }
alert(Function.prototype == (function(){})); // function prototype(){ native code }  false
alert(Function.constructor); // function Function(){ native code }
alert(String.prototype == ''); // ''  true
alert(String.constructor); // function Function(){ native code }
alert(Boolean.prototype == false);  // false  true
alert(Boolean.constructor); // function Function(){ native code }
alert(Number.prototype == 0); // 0  true
alert(Number.constructor); // function Function(){ native code }
alert(Ext.prototype == undefined); // undefined  true
alert(Ext.constructor); // function Object(){ native code }
alert(Date.prototype == new Date(0)); // [19700101] true
alert(Date.constructor); // function Function(){ native code }

それぞれのタイプの原型はすべて異なって、構造関数も異なっている.カスタムオブジェクトがundefinedのプロトタイプである場合、そのコンストラクション関数のデフォルトはObjectです.prototype.constructor.
Object.prototypeは本当のベースオブジェクトです.属性は何もないようですが、{}でもGlobalオブジェクトでもありません.
Function.prototypeはprototype関数で、値は返されません.
Function.constructorも関数であり、実際にはFunctionオブジェクト自体である.すべてのコンストラクション関数のデフォルトはFunctionです.
それだけでなく、関数プロトタイプのコンストラクタもFunction.
6.
Ext.apply(obj, config, defaults);
この方法はconfig,defaultsの属性をobjオブジェクトにすべてコピーする.configはdefaultsの同名属性を上書きする.
7.
Ext.extend(subObject, supObject, overides);
Ext.extend(supObject, overides);
继承プロトタイプチェーンにより親プロトタイプ上の属性を操作するとともに、親プロトタイプ上の属性を上書きすることができる.
子類の原型を親類の原型に向ける.
参照先:
http://wangyu.iteye.com/blog/210849
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) {
            return v ? !!v.tagName : false; // '' false ; 'abc' true
        }

//         
"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 = {
    "fName" : function(){
        alert(this["fName"]);
    }
}
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(arguments.callee.length);  // 2
    alert(arguments.length);  // 1
    return a ? (b ? a + b : a) : 0;
}

alert(add(1));