JavaScriptは非常に柔軟な言語で、プログラマーがJavaScriptを構成する基本オブジェクトそのものに機能を追加することを許しています。 この機能追加を行う理由としては、あるブラウザで実装されている非常に強力な機能が別のブラウザで実装されていないということが上げられます。このことからJavaScriptライブラリの多くは基本オブジェクトの機能強化をそれぞれ独自に行っています。この結果、複数のライブラリを同時に利用するような場合、それらの強化・追加された機能が重複・衝突してしまう可能性を考慮する必要があります。Extではこういった問題を回避するために、基本オブジェクトへの機能追加は必要最小限のものにとどめています。Framework Scanner(英語)では各ライブラリが行っているJavaScriptへの機能強化を比較していますので、興味のある方はご一読下さい。
下記のメソッドがFunctionのprototypeに追加されています(Ext JSの"createSequence"と"createInterceptor"はExt Coreでは除外されていることにご注意下さい)
var sayHello = function(firstName, lastName){
alert('Hello ' + firstName + ' ' + lastName);
};
Ext.get('myButton').on('click', sayHello.createCallback('John', 'Smith');
var sayHello = function(firstName, lastName, e){
alert('Hello ' + firstName + ' ' + lastName);
};
Ext.get('myButton').on(
'click',
sayHello.createDelegate(this, ['John', 'Smith'],
//0 を指定して渡した引数を第1引数として渡すことを指定
0
);
var whatsTheTime = function(){
alert(new Date());
};
whatsTheTime.defer(3000); //実行するまえに3秒待機
下記のメソッドがArrayのprototypeに追加されています(ただし、ブラウザによって実装されていない場合に限る)。
var idx = [1, 2, 3, 4, 5].indexOf(3); //2を返す
var arr = [1, 2, 3, 4];
arr.remove(2);
var len = arr.length; // lenの値は3
Stringクラスにはformatメソッドのみが追加されています。Ajax.NETと一緒に利用すると衝突する可能性があることにご注意下さい。
var s = String.format( 'Hey {0} {1}', how are you?', 'John', 'Smith' ); //{0} はJohに、 {1}はSmithに変換される