javascript基礎プログラミングの対象向けプログラミング

9358 ワード

javascriptは解釈型の言語で、コンパイルする時と運行する時の間には明らかな区別がないので、もっとダイナミックな方法が必要です.javascriptには正式なクラスの概念がありません.実行時に新しいオブジェクトタイプを作成して代替できます.既存のオブジェクトの属性をいつでも変更できます.
    javascriptは原型に基づいてオブジェクトに向かう言語で、オブジェクトごとにプロトタイプがあり、オブジェクトはプロトタイプから属性と方法を継承します.オブジェクトの属性にアクセスしたり、オブジェクトを呼び出す方法がある場合は、まず、オブジェクトに同名の属性や方法があるかどうかを確認します.ある場合は、インスタンス属性または方法を使用する.もし存在しないならば、インタプリタはオブジェクトのプロトタイプに適切な属性または方法があるかどうかを確認する.このような特殊な環境において、このタイプ(クラス)のすべてのオブジェクト共通方法および属性は、プロトタイプにカプセル化されてもよく、各オブジェクトは、当該オブジェクトの特定データを表す例示的な属性を有してもよい.
    javascriptでは、原型関係は再帰的です.つまり、対象の原型も一つの対象ですが、原型自体はもう一つの原型があるかもしれません.これは、訪問された属性がオブジェクトの例示的な属性ではなく、オブジェクトのプロトタイプの属性でもないことが発見された場合、解釈器はプロトタイプチェーンに沿ってプロトタイプのプロトタイプを検索することを意味する.まだ見つかっていないなら、引き続きプロトタイプのチェーンに沿って上に捜索します.javascriptの中でobjectはすべての対象の超種類で、だからobjectはその検索の終点です.もしobjectの中でまだ見つかっていないならば、帰ってくる値はundefinedです.呼び出し方法であれば、errorをスローします.
    一、javascript対象向け基礎
    1、オブジェクトの作成
    javascriptのオブジェクトはnew演算子と構造関数を使って作成されます.コンストラクタは、オブジェクトが占有するメモリを初期化することによって、新しいオブジェクトの使用を準備する特殊なタイプの関数です.パラメータを持たない構造関数を使ってもいいし、パラメータを持つ構造関数を使ってオブジェクトを作成してもいいです.例えば:
var city = new String();
var city = new String('  ');
    2、対象廃棄とゴミ回収
    オブジェクトと他の変数はメモリを使用する必要がありますが、コンピュータのメモリリソースは限られています.潜在的なメモリ不足を防ぐために、あるプログラミング言語はプログラマに彼らのプログラム中のメモリの使用を注意深く管理するように強制されます.幸い、javascriptはプログラマにメモリ管理を要求していません.javascriptがオブジェクトを作成すると、インタプリタは自動的にオブジェクトにメモリを割り当てます.対象が使用済みになったら、解凍器は自動的に対象のメモリを整理します.つまりゴミ回収です.
    しかし、もし私達の対象コードに大量のデータ操作が含まれているなら、必要でないデータをnullで換えて、できるだけ早く資源を釈放してください.
var book = new Book();
....
       ...
....
book = null;
    同じデータに複数の参照がある場合は、すべての参照がnullに設定されていることを確認する必要があります.そうでなければ、解釈器はこれらのデータを保持して、再度必要に応じます.
    3、オブジェクトの属性を動的に追加する
var obj = new Object('hello world');
alert(obj.name);//undefined
obj.name='jiajia';
alert(obj.name);//jiajia
    動的に追加された属性は、インスタンス属性と呼ばれる.これは、それらが追加された特定のオブジェクトまたはインスタンスにのみ現れるためである.これに対してもう一つの共通属性があります.例えば、stringのlength属性は、すべてのstringオブジェクトがこの共通属性を持っています.インスタンス属性は、ある特定の用途のために既存のオブジェクトを補足または拡張するために有利である.
    4、オブジェクトの属性を動的に削除する
var mystring = new String('hello world');
mystring.isTrue = true;
delete mystring.isTrue;
alert(mystring.isTrue);//undefined;
    javaプログラマは、javascriptのdeleteはJavaとは違って、オブジェクトの中で属性を削除したり、配列から要素を削除したりするだけですが、対象自体を削除することはできません.
    5、オブジェクトを動的に追加する方法
    属性を追加するように、方法を動的に追加することもできます.
var mystring = new String('hello world');
function alertSay(){alert('  ');};
mystring.sayno=alertSay;
mystring.sayno();//  
 
  
                 ,             : 
   
   
  
var mystring = new String('hello world');
mystring.sayno=function(){alert('  ');};
mystring.sayno();//  
    6、
    プログラムでオブジェクトの の と を する は、with を して、その と を する があるオブジェクトをwith で めることが えられます.
with(  ){
    .....  .....
}
    たとえば:
with(document.myform){
     if(username.value=='')
     if(password.value=='')
}
    forステートメントは、オブジェクトのすべての を するための な です.
すべての に !
    えば、 の はfor...in でdocumentオブジェクトのすべての を して します.
document.write('

document :

'); for(var i in document){ document.write(i+'
'); }
    、ユーザー のjavascript とオブジェクトを する
    1、
    とは、まず を し、 に と を することです.
    :
function createPerson(name){
     var personobj = new Object();
	 personobj.name=name;
	 personobj.say=function(){
	     alert('who is'+this.name);
	 }
	 return personobj;
 }
 var persion1 = createPerson('fanfan');
 var persion2 = createPerson('xiaoxiao');
 person1.say();//fanfan
 person2.say();//xiaoxiao
    javascriptが するにつれて、このような の は されなくなりました. は つあります
    (1) の、つまりこのような はnew のオブジェクト には されません.
    (2) の、 createPerson() を び して、 しい say()を します.これは、 オブジェクトに のバージョンのsay() があることを する.そして には、すべてのオブジェクトが じ を しています.
    2、コンストラクタの
    と ていますが、クラス の の は です. 
function Person(name){
    this.name = name;
    this.say = function(){
      alert('who is'+name);
    }
}
var person1 = new Person('fanfan');
var person2 = new Person('xiaoxiao');
    の にオブジェクトを せずに、thisキーワードを していることが かります.new でコンストラクタを び すと、コンストラクタの の が される にオブジェクトが され、このオブジェクトはthis でアクセスできます.そして、 にthisに を り てることができますが、このthisはデフォルトで として されます.
    そして、 モードと じように、 もオブジェクトを していないので、 しい を します.
    3、 の
    プロトタイプ は のプロトタイプ を しています.objectクラスでは、オブジェクトの クラスを すプロトタイプ が オブジェクトにあります.
function Person(){
 
}
Person.prototype.name='fanfan';
Person.prototype.say=function(){
alert('who is'+this.name); 
 
  
}
var person 1=new Person()
 
  
var person2 = new Person();
 
  
      new Person()    ,   prototype                 ,     Person           say()     。     ,            ,                。  ,      ,       instanceof                 。 
   
   
  
alert(person1 instanceof Person);//true
    しかし,プロトタイプ は パラメータによって を することができない.
    4、 と
    オブジェクトの をコンストラクタ で し、オブジェクトをプロトタイプで する .このように は だけ します. オブジェクトにはオブジェクト のインスタンスがあります.
 function Person(name){
 
	 this.name=name;
	 
 }
 Person.prototype.say=function(){
	     alert('who is'+this.name);
 }
 var person1 = new Person('fanfan');
 var persion2 = new Person('xiaoxiao');
 alert(person1.say());//fanfan
 alert(person1.say());//xiaoxiao
    5、
 function Person(name){
 
	 this.name=name;
	 if(typeof Person.initial == 'undefined'){
		 Person.prototype.say=function(){
	         alert('who is'+this.name);
         }
	     Person.initial = true;
	 }
	 
 }
 var person1 = new Person('fanfan');
 var persion2 = new Person('xiaoxiao');
 alert(person1.say());//fanfan
 alert(person1.say());//xiaoxiao
    6、JSON でオブジェクトを する  
var personobj={
    firstname:'fanfan',
    lastname:'xiaoxiao',
    age:50,
    tellyourage:function{
  
         alert('yourage:'+this.age)
    }

}
    と な はないですが、もっと いです.
    、 の
    サブクラスを すると、 クラスのすべての と を します. と の を みます.すべての と は であることを えてください.したがって、サブクラスは これらの にアクセスすることができます.サブクラスはまた、スーパークラスにない しい と を することができます.また、スーパークラスの と をカバーすることもできます.
    1、 を る
    オブジェクトの とは、 しいクラスが いクラスに されている( いクラスは の を しなければならない)、 の を するために、その は の りです.コンストラクタは つの なので、クラスAのコンストラクタをクラスBの にして び します.クラスBはクラスAの で された と を け ります.
 function Person(name){
 
	 this.name=name;
	 this.say=function(){
	         alert('who is'+this.name);
         }
	    
 }
    キーワードthisは されているオブジェクトを することを っています. では、thisが するオブジェクトを します.この は, としてではなく,Peopleを の として を することである.
function WhitePeople(name){
	 this.inherit=People;//  
	 this.inherit(name);//  
	 delete this.inherit;//    
	 this.area = function(){
		alert('    ');
	 }
 }
 var tom=new WhitePeople('tom');
 tom.say();
 tom.area();
    したがって、 しい と しい は を してから しなければなりません.これは の する と をカバーしないためです.
    と って の をサポートすることができます.つまり、1つのクラスは のスーパークラスを することができます.
function Person(name){
 
	 this.name=name;
	 this.say=function(){
	         alert('who is'+this.name);
         }
	    
 }
function Worker(pay,work){
    this.pay=pay;
    this.work=work;
}

function City_worker(name,pay,work){
    this.inherit = People;
    this.inherit(name);
    delete this.inherit;  

    this.inherit = Work;
    this.inherit(pay,work);
    delete this.inherit; 

}
var jerry=new City_worker('jerry','10000','coder');
jerry.say();
alert(jerry.work);
    2、コール
    ベースクラス.call(オブジェクト、パラメータリスト)
function WhitePeople(name){
	 //this.inherit=People;//  
	 //this.inherit(name);//  
	 //delete this.inherit;//    
         People.call(this.name);
	 this.area = function(){
		alert('    ');
	 }
 }
 var tom=new WhitePeople('tom');
 tom.say();
 tom.area();
    3、アプリ
    apply()もオブジェクトを つのパッケージ と っています.apply() には2つのパラメータがあり、thisを る と に すパラメータの があります.フォーマット:
    ベースクラス.appy(オブジェクト、パラメータ )
function City_worker(name,pay,work){
   
  People.apply(this,new Array(name));
  Worker.apply(this,[pay,work]);

}
var jerry=new City_worker('jerry','10000','coder');
jerry.say();
alert(jerry.work);
    4、プロトタイプチェーン
    の3つの はすべて を いて され、 し、プロトタイプ の 、プロトタイプチェーンもあります.
function Blue_collor(){

}
Blue_collor.prototype.name='jean';
Blue_collor.prototype.say=function(){
    alert('who is '+this.name);
}

function City_blue_collor(){

}
City_blue_collor.prototype = new Blue_collor();
var j1 = new City_blue_collor();
j1.say();
    プロトタイプチェーンを して する 、ベース にはいかなるパラメータも しないことに してください.