!javascript作用ドメインチェーンの原理と原型チェーン

1677 ワード

一つの関数では、実行時に識別子が表示されます.
      識別子はxであり、局所変数または外層変数、または大域変数、または関数オブジェクト自体の属性でありうる.
     1.スコープ内で検索します.もし2が見つからなかったら、プロトタイプチェーンで探してください.
     2.識別子x.aは、this.aを含む.先に前のようにxを見つけて、xのプロトタイプチェーンの中でaを見つけます.
function a()
{
    this.x=function  x()
    {
        alert(「aa」)
    }
)
function b()
{
     機能  x()
    {
        alert("ab")
    }
     x()
     b.prototype.x()

b.prototype=new a
b.com nstructor=b;
b()//  alert(「ab」);alert(「aa」);
考慮する
クラスA 0
{
   int a;//インスタンス変数a 0.
   void A 1()
   {
        int a;//局所変数a 1
        void A 2()
        {
                int a;//局所変数a 2
                a=0;//ここのaはa 2であることは明らかです.まず作用ドメインチェーンによって探してみます.見つけられなくて、原型チェーンによって探します.
        }    }
)
二次元スコープ検索
スコープ内で変数オブジェクトの属性を検索します.(もしあれば)ECMAScriptからのプロトタイプ特性を考慮しなければなりません.
属性がオブジェクト内に直接発見されていない場合は、クエリーはプロトタイプチェーン内で継続されます.すなわち、常に二次元チェーンで検索されます.
(1)作用ドメインチェーン環節;(2)各作用ドメインチェーン――原型チェーン環節に深く入り込む.Object.prototypeで属性を定義したら、この効果が見られます.
function foo() {
  alert(x);
}
 
Object.prototype.x = 10;
 
foo(); // 10,       ,      

活動対象に原型がないので、次の例で見られます.
function foo() {
 
  var x = 20;
 
  function bar() {
    alert(x);
  }
 
  bar();
}
 
Object.prototype.x = 10;
 
foo(); // 20,        ,         。