JS var self=this

2577 ワード

var self=this/本スコープの対象を指す
プライベートなselfパラメータを与えた.これはオブジェクトをプライベートメソッドに対して可視化することができる.このようなやり方は、プライベート方法が公共の方法によって呼び出されないからです.プライベートな方法を有効にしてください.
これらはオブジェクトに付加されていますが、外部からのアクセスはできません.また、これらはこのオブジェクトの共通の方法によってアクセスできません.彼らは私有メンバーにしか見えません.プライベート方法はコンストラクタ内部の関数です.ECMAScript Language Specificationの一つのエラーは、このエラーがthisを内部関数に正しく設定できませんでした.
Code
 function Class1(){
            //self(self        ) self        ( .    i aa() .    public_dd())
            var self = this;
            this.i = 1;
            this.aa = function(){
                this.i ++;
                alert(this.i);
            }
            var private_bb = function(){
                alert(self.i);
                //self.public_dd();//   self       ,  self                
                //aa();//           self  
                public_dd();//          self.public_dd();
                self.aa();
            }
            this.cc = function(){
                private_bb();//    
            }
            
            //      
            //         
            function public_dd()
            {
                self.aa();
                alert("dd");
            }
        }
        var o = new Class1();//  Class1       ++(          )
        o.cc();//  ++
        document.write(o.i);//return 2
var宣言の変数を使用して、各変数の作用領域は局所的であり、これはそれらが定義した関数の内部にのみアクセスできることを意味する.varを使用しないと、変数のスコープはグローバルであり、つまり変数はWebページのどこにでもあるJavaScriptコード(または本ページに含まれる任意の外部JSライブラリ)にアクセスできます.
同じ名前のグローバル変数とローカル変数があるなら、変数のスコープを設定することが重要です.最初から良いJavaScriptのプログラミング習慣を身につけます.この習慣の一つは、変数の作用領域を明示的に定義することである.
以下は作用領域を考慮する際のルールです.
関数内の変数が宣言時にキーワードvarを使用している場合、この関数の局所的な使用しかできません.
関数内の変数が宣言時にキーワードvarを使わず、また同じ名前のグローバル変数が存在すると、そのグローバル変数として扱われます.
変数がローカルで宣言され、キーワードvarが使用されている場合は、初期化されていません(例えば、割り当て).アクセスできますが、定義されていません.
変数が局所的に宣言されている場合、キーワードvarは使用されていません.または、大域変数として明示的に宣言されていますが、初期化されていません.大域的にアクセスできますが、定義されていません.
関数にvarを使うことで、同じ名前のグローバル変数とローカル変数を使うことによる問題を防ぐことができます.これは外部JavaScriptライブラリを使う時に特に重要です.

getCatalogTree:function(CId,strId){
 ...
},
Oper:function(catalogId){
 this.getCatalogTree(0,"tree");//         this
 this.option.onSuccess = function(transport){
            if(self.ChkMng(transport.responseText))
     {
          self.getCatalogTree(0,"tree");//           self
     } 
        };
}