JavaScript急速充電

3144 ワード

JavaScript急速充電
Netscapeが発明したのは、関数言語SchemaとSelfからの思想で、Pythonに少し近いです.
特徴:弱タイプ、動的解析、関数はオブジェクト、オブジェクトはProttypeに基づいています.
前の三つの特徴は分かりやすいです.最後の一つは重点的に説明します.
最も基本的な最適な実践:大規模なプログラムでFunctionとオブジェクトを使用する!キャッシュレスでプログラミングしないでください.
The easure st way to create an object is:
var myObject=new Object()
JavaScriptオブジェクトは本質的に関連配列です.
ヒント:関数を変数に割り当てるときに使用するfunctionName()とfunctionNameの違いに注意してください.前者は関数の結果を変数に支払います.後者は関数を変数に参照します.
JSONを使用してJavaScriptオブジェクトを作成し、変更することができます.JavaScriptもJSONが作成したオブジェクトを変更することができます.
コンストラクタ/クラス/プロタイプの属性
JavaScriptは対象と種類の概念もありますが、建物の継承の概念はありません.実際には、JavaScriptオブジェクトごとに同じベースの例があります.このベースクラスは、実行時にメンバーフィールドと関数を自分自身と結びつける能力があります.
安全な代替品:prototype属性
prototypeはJavaScriptオブジェクトの属性です.OO言語にはピアがありません.関数と属性は、構造関数のプロトタイプに関連付けることができる.その後、プロトタイプとnewキーワードが協働し、new関数を呼び出すと、関数プロトタイプのすべての属性と方法が結果オブジェクトに付加されます.

function MyObject(name, size){
this.name = name;
this.size = size;
}

MyObject.prototype.tellsize = function(){
alert("size of "+this.name+" is "+this.size);
}

var myObj = new MyObject("tiddles", "7.5 meters");
myObj.tellSize();
気をつけてください.構造関数を宣言してから、私たちはprototypeを引用することができます.オブジェクトの恩はそれらを継承します.構造関数を呼び出す前にもうprototypeに添付したものです.prototypeは二回の呼び出しコンストラクタ間で修正できます.関数だけでなく、prototype上に任意のものを追加できます.
プロトタイプを使用してJavaScriptオブジェクトのためにクラスのような挙動を定義することは、安全で信頼できる経路である.
拡張内装類
Webブラウザでは、いくつかのコアクラスがプロトタイプ機構によって拡張可能である.

Array.prototype.indexOf = function(obj) {
var result = -1;
for (var i=0; i< this.length; i++) {
if (this[i]==obj){
result=i;
break;
}
}
}
prototypeの継承
JavaScriptは現地では実現されていませんが、いくつかの巧妙な融通のきかない方法があります.
JavaScriptオブジェクトの反射
オブジェクトの種類を見つけるために使用します.
イベントハンドリングと関数のコンテキスト
プログラム方式でDom要素のイベント処理関数を宣言する場合、関数にパラメータを割り当てなくても、Dom要素をクリックすると、Eventオブジェクトは関数として呼び出されるパラメータであり、要素自体はコンテキストオブジェクトとして機能します.
イベントハンドラ関数がモデルオブジェクトに付加されているものを参照する場合、2つの方法があります.
1.名称引用モデルを使用する
グローバルアレイ保存モデルオブジェクト名と参照対応関係を確立し、モデルオブジェクト名をidの一部としてDomオブジェクトを作成し、Domオブジェクトidのプレフィックスを利用してグローバルアレイでモデルオブジェクトを検索します.
2.Domノードにモデルを追加する
Domオブジェクトとモデルオブジェクトの間に循環参照を作成します.メモリ漏れに注意してください.
包みを閉じる
Functionオブジェクト自体は不完全です.彼を呼び出すためには、コンテキストオブジェクトとパラメータのセットが必要です.最も簡単な場合には、クローズドは、実行に必要なすべてのリソースを縛ったFunctionオブジェクトと見なすことができます.

function Robot(){
var createTime = new Date();
this.getAge = function(){
var now = new Date();
var age = now-createTime;
return age;
}
}
クローズドは、内部関数が外部関数内に作成された場合にのみ動作します.
閉じたパケットは外部関数のローカル変数と一緒に縛られていて、外部関数がごみによって回収されないようにします.
閉じたパケットを作成する最も一般的な場合は、イベント処理のコールバック関数をイベントソースに結びつけます.
レベルが一般的なAjaxプログラマに対して、代替方法があれば、クローズドを使用することは避けられます.プロトタイプを使用して、ユーザー定義のオブジェクトタイプに関数を割り当てると、関数を作成したり、閉じたパッケージを作成したりしません.

function Robot(){
this.createTime = new Date();
}

Robot.prototype.getAge = function(){
var now = new Date();
var age = now - this.createTime;
return age;
}