JavaScript関数部分

5579 ワード

オブジェクト:
     JavaScriptの
対象の字面表示法では、対象の構成部分を列挙するだけで対象を作成することができます.これもJsonの霊感の源です.対象の字面量とは{}に含まれる複数のキーペアのことです.
var stooge={
'first_name' : 'jack' ,
'last_name' : 'ma'
};
     対象内の値を取るにはstooge[first uname]またはstooge.first_]を使うことができます.name
     undefinedの対象から値を取るのは違法です.stooge.name.meのようにType Errorエラーが発生します.解決策は& 、stooge.name&stooge.nameでundefinedに戻ります.
     オブジェクト内の値を変更するにはstooge.first_name='mark';first_ならnameが存在しないと、オブジェクトに新しい属性を追加します.
     オブジェクトを巡回してforまたはforを使います. inです
for(var name in stooge){
alert(stooge.name);
}
for inの欠点は、オブジェクト中の属性を遍歴しても順序がないということです.順序のある出力のためにforを使用することができます.
var names=['first_name ','last_name '];
for(var i=0;i<names.length;i++){
alert(stooge.names[i]);
}
     オブジェクトの属性をdeleteで削除します.delete stooge.first_name
プロトタイプ:
     各オブジェクトは一つのプロトタイプオブジェクトに接続され、そこから属性を継承することができます.文面量で作成したオブジェクトはすべてObject.prototypeに接続されています.
プロトタイプ接続は検索時にのみ有効です.(これは非常に有用です.変更操作はプロトタイプの値を変えられないということを知っています.)オブジェクトの属性を検索すれば、このオブジェクトは対象のプロトタイプのオブジェクトを検索します.最終的なObject.prototypeまでは、その後もundefinedに戻りません.
関数:
     関数はオブジェクトで、オブジェクトのプロトタイプの終点はObject.prototypeで、関数のプロトタイプの終点はFuntion.prototypeです.
     
関数の作成:
     各関数は、作成時に2つの属性を付加し、1つの関数のコンテキスト、1つは関数によって実現されるコード(関数によって実現されるコードは、「呼び出し」属性とも呼ばれ、1つの関数を呼び出したときには、この関数を呼び出す呼び出し属性と見なしてもよい)です.
var add=function(var a,var b){
return a+b;
};
上は文字の量で作成された関数です.文面量で作成された関数は、コンテキストに接続された接続(いわゆるクローズド)を含みます.
     関数の呼び出し:
     呼び出された関数は、ステートメントを受信するパラメータに加えて、thisとargmentsパラメータを受信する.thisの値は呼び出しのモードによって決まります.全部で4つの呼び出しモードがあります.方法の呼び出し、関数の呼び出し、コンストラクタの呼び出し、appyの呼び出しです.
     メソッドコール:
var myObject={
var value=0;
add:function(i){//           
return this.value+i;//   this  myObject
}
};
myObject.add(2);//          。          this        。
     関数コール:(エラーポイントはここです.)
この点を説明するために、まず次のように説明してから例を見ます.ここで注意したいのは、関数コールを行う時にthisというのは全体のwindowsを指しています.
この問題の直接的な影響は関数の内部関数呼び出し時である.
var i=100;
var MyObject={
    i:10,
    out:function (value) {
        var inFun = function () {
            alert(value + this.i);
        }
        inFun();//       
    }
}
MyObject.out(10);//     (  )  
上記の例ではinFun()の呼び出しは関数として呼び出されますが、thisはwindowsを指しますので、this.i=100です.最終的な結果は110です.
上記の問題を解決するためには、以下の方法があります.
var i=100;
var MyObject={
    i:10,
    out:function (value) {
        var that=this;//           this    that   ,                
        var inFun = function () {
            alert(value +that.i);
        }
        inFun();
    }
}
MyObject.out(10);
     コンストラクタの呼び出し:
私はこのような方式の関数の呼び出しが好きではありません.javaに詳しい私にとってはおかしいと思います.もともと変数に関数の値を付けるのはおかしいです.ここで簡単に話します.
var MyOb=function(ss){
    var sta;
    this.sta=ss;
}
MyOb.prototype.fun= function () {
    return (this.sta);
};
var oo1=new MyOb('oo1');// new       MyOb         ,                oo1,MyOb  this          ,   oo1
var oo2=new MyOb('oo2');
alert(oo1.fun());//  oo1,    sta           
alert(oo2.fun());//  oo2

  apply  :             this。
var MyOb=function(){
    return (this.sta);//   this  app
}
var app={
    sta:"i am ok!"
}
var res = MyOb.apply(app);//      app   this
alert(res);
           ,         this    arguments  。              。
var fun= function () {
    var i=0;
    var sum=0;
    for(i;i<arguments.length;i++){
        sum+=arguments[i];
    }
    return sum;
}
alert(fun(1,2,3,4,5));
       ,               (         )。