EXTソース学習と研究(一)
5089 ワード
EXTソース学習と研究(一)
1.
アダプタ
EXTはもともとYahoo YUI JSの拡張であり、YUIの下位コードに依存してブラウザ間の問題を処理していた.現在、ユーザは、サードパーティ製インプリメンテーションまたはEXTを選択して適合することができる.もちろん、EXTを使うのがベストです.
2.
コア
コアは、適合上に構築する最下位コードである.
3.
アクティブドメイン
これは、関数の定義がどこにあるかが重要ではないことを示す.呼び出し元をいつでも切り替えることができます.したがって、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
それぞれのタイプの原型はすべて異なって、構造関数も異なっている.カスタムオブジェクトが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(...)
変数の役割ドメインを制限するために使用する複数のネーミングスペースを作成します.
このメソッドは、最後の文字列で作成されたネーミングスペースのみを返します.
上のコードは次のとおりです.
TangLiang = {};
TangLiang.NS = {};
10.
コア構文
匿名関数を定義して実行
(function(){
})();
//なぜトップに直接書くのではなく、このように書くのですか?役割ドメインに関係する可能性がある.
11.タイプ変換
12.
createInterceptor
関数注入(BEFORE)
func.createInterceptor(funcInterceptor, this);
funcInterceptor();
//before of func exec funcInterceptor,
//if return [boolean true] exec func.
13.
useShims
マスク枚
14.
コア構文
15.
=
16.
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));