javascript筆記:javascript内の対象の作成を深く分析する(中)
8463 ワード
javascriptの対象を深く分析して、このシリーズを作成するのは私のブログの中で一番人気のある文章です.次の文章を書き上げるように促してくれたブロ友がいます.昨日と今日は資料を整理していますが、文章の内容は本当に言いきれないです.
本テーマの上編では、三つのオブジェクトを作成する方法について述べました.最後に、類比javaを通して対象に向かう思想を逆に理解します.javascriptオブジェクトの作成を理解します.表題の核心対象の作成によって、私が述べた問題はすでに説明済みですが、上編を書き終わった時はいつも何か足りないと感じました.小さなjavascriptオブジェクトを作成するには、技術の拡張面は非常に広いですが、実際に開発された時には、ある程度発散されていない知識の蓄積があります.また、理解しにくい問題にぶつかると思います.
1.クラスの属性と方法の別の理解
上の文章では、「一.分類の属性と方法:対象を初期化することで、分類の属性と方法として認識することができます.この定義はjQueryの中で多く使われます.」
javaの中のクラスは静的な属性と方法を持つことができることを知っていて、この種類の対象を具体化する必要がなくて、これらの属性と方法にアクセスすることができますが、javascriptの中では対象の初期化方式を通じてのみこのような特徴を模擬することができますか?実はそうではないです.プログラム言語では、クラスの方法と属性の比較基準の呼び方は、静的作用域で定義された属性と方法はいつでも同じ位置からアクセスできます.厳密な意味では、javascriptは静的な作用領域がないので、対象を初期化してこのような効果を生むことができます.しかし、これはあまりにも直感的ではないです.前のブログでjavascript言語の設計時に省略された類の定義を述べました.種類の定義を構造関数に与えたので、私達はこのように考えられます.javascript言語の中にクラスの属性と方法があるようにするには、一番いい表現形式は構造関数自体に属性と方法を持たせます.
2.this指針に関する問題
これはjavascriptの最も重要な概念です.使い方はjavascriptの精髄を把握する鍵です.まず次の文を見てみます.これはthisの使い方の真髄を表しています.
キーワードthisの使い方:オブジェクトの方法では、thisは常にこの方法を呼び出すオブジェクトを指す.
この文では、thisは対象に存在する方法であり、対象と方法、方法は対象に属する.
使い方一:関数での使用
用法二:対象方法としての呼び出し
この使い方は私が最初に話したのと似ています.コードは以下の通りです.
javascriptコンストラクターというと、もう一つの基礎知識を繰り返し強調します.javascriptの中のコンストラクタにはクラスの特性が含まれています.私が書いたコードを見ます.
apply()は関数オブジェクトの一つの方法で、関数を変更する呼び出しオブジェクトとして機能し、最初のパラメータは変更後の呼び出しの対象を表します.したがって、thisとは、この最初のパラメータのことです.テストコードは以下の通りです.
3.実行環境とスコープ
私は上でjavascriptの中でthisの使い方を総括する時一つの問題を提出しました.なぜthisはwindowを指していますか?この問題を説明するとjavascriptの中にとても重要な概念があります.
まず、実行環境とは何ですか?javascriptで実行する環境は二つの種類に分けられています.一つはグローバル環境、一つはローカル環境、全体ページで共有される方法と属性はグローバル環境に対して、関数{}号の実行環境はローカル環境です.環境定義を実行した変数や関数がアクセスできる他のデータはそれぞれの行為を決定しました.各実行環境は変数オブジェクトを定義しています.環境で定義されているすべての変数と関数はこのオブジェクトに保存されています.私たちが作成したコードはこのオブジェクトにアクセスできませんが、解析器はデータを処理する際にバックグラウンドで使用します.
グローバル実行環境は、最も周辺の実行環境であり、ウェブブラウザの範囲ではECMAScript標準が施行されています.グローバル範囲はjavascriptの大域範囲とは異なります.グローバル実行環境は、アプリケーションが終了することを知っています.ウェブページやブラウザを閉じてから廃棄されます.ローカル環境は、関数オブジェクトを関連オブジェクトとしています.
javascript言語は大域実行環境と局部実行環境の概念を規定しています.これは極めて重要な応用を生み出しました.コードが一つの環境内で実行されると変数のオブジェクト構成のロールドメインチェーンが作成されます.その用途は実行環境に対してすべての変数と関数にアクセスする権利があることを保証します.スコープの先端は常にコードが実行されている環境の変数オブジェクトです.この環境が関数であれば、その活動対象を変数の対象として、活動対象は最初に変数だけを含んでいます.つまり、argmentsオブジェクトです.argmentsはグローバル環境には存在しません.スコープの次のオブジェクトは前のオブジェクトを含む外部環境から来ます.次の変数オブジェクトは次の環境を含んでいます.このように類推します.グローバル環境に至るまで、グローバル環境は常にドメインチェーンの最後の対象となります.
へへへ、この説明を見て、目まいがしますか?角度を変えて考えてもいいかもしれません.javascriptの中で、すべての属性と方法はいずれかの対象に属しています.javascriptの中では、すべての方法や属性の呼び出しはobj.method()です.javascript解像度は関数の機能領域の上層作用領域に探して、window全体の環境まで、本当に見つけられないのはデフォルトでwindowオブジェクトに授与します.
はい、今日の内容はこんなに多く書きました.Javascriptが簡単に見える対象を一つずつ作って、こんなに多くの知識を伸ばすことができるとは思いませんでした.このような点を吟味して、面に行く研究方法はなかなかいいです.最近はjavaが多すぎます.(最近は新しいシリーズを作りたいです.ずっと作りたいシリーズです.でも、一人の人間はエネルギーに限界があると言われました.やはり先に書き終わっていないものを書き終わります.)javascripを書く情熱が足りなくなりました.フルタイムでフロントエンドの環境を作りたいです.でも、javaも面白いです.最近友達と交流してから、ますます力を入れて、javaEEの枠組みを3セット書き終わりました.
本テーマの上編では、三つのオブジェクトを作成する方法について述べました.最後に、類比javaを通して対象に向かう思想を逆に理解します.javascriptオブジェクトの作成を理解します.表題の核心対象の作成によって、私が述べた問題はすでに説明済みですが、上編を書き終わった時はいつも何か足りないと感じました.小さなjavascriptオブジェクトを作成するには、技術の拡張面は非常に広いですが、実際に開発された時には、ある程度発散されていない知識の蓄積があります.また、理解しにくい問題にぶつかると思います.
1.クラスの属性と方法の別の理解
上の文章では、「一.分類の属性と方法:対象を初期化することで、分類の属性と方法として認識することができます.この定義はjQueryの中で多く使われます.」
javaの中のクラスは静的な属性と方法を持つことができることを知っていて、この種類の対象を具体化する必要がなくて、これらの属性と方法にアクセスすることができますが、javascriptの中では対象の初期化方式を通じてのみこのような特徴を模擬することができますか?実はそうではないです.プログラム言語では、クラスの方法と属性の比較基準の呼び方は、静的作用域で定義された属性と方法はいつでも同じ位置からアクセスできます.厳密な意味では、javascriptは静的な作用領域がないので、対象を初期化してこのような効果を生むことができます.しかし、これはあまりにも直感的ではないです.前のブログでjavascript言語の設計時に省略された類の定義を述べました.種類の定義を構造関数に与えたので、私達はこのように考えられます.javascript言語の中にクラスの属性と方法があるようにするには、一番いい表現形式は構造関数自体に属性と方法を持たせます.
function JsObj()
{
this.sayHello = function(){
console.log('Hello World!!!');
}
}
JsObj.whosay = function(){
console.log('sharpxiajun say Hello World!!!');
}
JsObj.whosay();
var obj = new JsObj();//sharpxiajun say Hello World!!!
obj.sayHello();//Hello World!!!
このような书き方の静的な属性と方法の特徴はもっとはっきりしています.この前、ある人がjavascriptの中の対象に向けたやり方は今では対象に向けた标准になりました.私はやはりjavaの方式を対象に向かう標準方式としたいです.javascriptはアナログ方式でしか実現できません.もしjavascriptを対象にして新しい標準として理解させたら、慣性の思惟はjavascriptを対象にするやり方に対してもっと明確な認識を持つことが難しいかもしれません.上のコードの原理はjavascriptの中の関数だけではなく、対象として与えられます.この問題はとても簡単で、よく分かりました.ここでこのコードを出して、皆さんに教えたいです.経典の枠組みのソースコードを読んでいる時、一部のデザイン思想はこのような書き方を使っています.2.this指針に関する問題
これはjavascriptの最も重要な概念です.使い方はjavascriptの精髄を把握する鍵です.まず次の文を見てみます.これはthisの使い方の真髄を表しています.
キーワードthisの使い方:オブジェクトの方法では、thisは常にこの方法を呼び出すオブジェクトを指す.
この文では、thisは対象に存在する方法であり、対象と方法、方法は対象に属する.
var obj = {};// var obj = new Object();
obj.nation = 'China';
obj.say1 = function()
{
console.log(obj.nation);
}
obj.say2 = function()
{
console.log(this.nation);
}
obj.say1();//China
obj.say2();//China
その結果、これはオブジェクトアプローチにおけるthisの使用を反映しており、thisは常にこの方法を呼び出す対象を指す.これはthis用法の標準的な定義ですが、本当にこの概念を理解して工夫します.以下はこの定義を抜きにして、私が知っているthisの使い方を列挙します.使い方一:関数での使用
function JsObj()
{
this.nation = 'China';
console.log(this.nation);
}
JsObj();//China
このthisはJsObj関数を指していますか?答えはNO、thisはwindowを指しています.下のコードを見てください.function JsObj()
{
this.nation = 'China';
console.log(this.nation);
}
JsObj();//China
console.log(nation);//China
console.log(window.nation);//China
console.log(this.nation);//China
効果を見ましたか?ウィンドウズを指しています.なぜかよく分からない子供靴があると思いますが、大丈夫です.この疑問は私の次の小節の内容を引き出します.用法二:対象方法としての呼び出し
この使い方は私が最初に話したのと似ています.コードは以下の通りです.
function say()
{
console.log(this.nation);
}
var obj = {};
obj.nation = 'China';
obj.objSay = say;
obj.objSay();//China
使い方三:コンストラクタとしての呼び出しjavascriptコンストラクターというと、もう一つの基礎知識を繰り返し強調します.javascriptの中のコンストラクタにはクラスの特性が含まれています.私が書いたコードを見ます.
function JsObj()
{
this.nation = 'China';
}
var obj = new JsObj();
console.log(obj.nation);//China
このnationは決してwindowに属さないです.信じますか?テストしてもいいです.var nation = 'USA';
function JsObj()
{
this.nation = 'China';
}
var obj = new JsObj();
console.log(obj.nation);//China
console.log(nation);//USA
使い方四:appy呼び出し時のthisapply()は関数オブジェクトの一つの方法で、関数を変更する呼び出しオブジェクトとして機能し、最初のパラメータは変更後の呼び出しの対象を表します.したがって、thisとは、この最初のパラメータのことです.テストコードは以下の通りです.
var nation = 'USA';
function say()
{
console.log(this.nation);
}
var obj = {};
obj.nation = 'China';
obj.objSay = say;
obj.objSay.apply();//USA
obj.objSay.apply(obj);//China
apply()のパラメータが空の場合は、グローバルオブジェクトをデフォルトで呼び出します.そのため、このときの運転結果はUSAで、thisが全体の対象を指すことを証明します.applyはobjオブジェクトに入ってきました.thisはオブジェクトobjを指しました.運行の結果はChinaです.3.実行環境とスコープ
私は上でjavascriptの中でthisの使い方を総括する時一つの問題を提出しました.なぜthisはwindowを指していますか?この問題を説明するとjavascriptの中にとても重要な概念があります.
まず、実行環境とは何ですか?javascriptで実行する環境は二つの種類に分けられています.一つはグローバル環境、一つはローカル環境、全体ページで共有される方法と属性はグローバル環境に対して、関数{}号の実行環境はローカル環境です.環境定義を実行した変数や関数がアクセスできる他のデータはそれぞれの行為を決定しました.各実行環境は変数オブジェクトを定義しています.環境で定義されているすべての変数と関数はこのオブジェクトに保存されています.私たちが作成したコードはこのオブジェクトにアクセスできませんが、解析器はデータを処理する際にバックグラウンドで使用します.
グローバル実行環境は、最も周辺の実行環境であり、ウェブブラウザの範囲ではECMAScript標準が施行されています.グローバル範囲はjavascriptの大域範囲とは異なります.グローバル実行環境は、アプリケーションが終了することを知っています.ウェブページやブラウザを閉じてから廃棄されます.ローカル環境は、関数オブジェクトを関連オブジェクトとしています.
javascript言語は大域実行環境と局部実行環境の概念を規定しています.これは極めて重要な応用を生み出しました.コードが一つの環境内で実行されると変数のオブジェクト構成のロールドメインチェーンが作成されます.その用途は実行環境に対してすべての変数と関数にアクセスする権利があることを保証します.スコープの先端は常にコードが実行されている環境の変数オブジェクトです.この環境が関数であれば、その活動対象を変数の対象として、活動対象は最初に変数だけを含んでいます.つまり、argmentsオブジェクトです.argmentsはグローバル環境には存在しません.スコープの次のオブジェクトは前のオブジェクトを含む外部環境から来ます.次の変数オブジェクトは次の環境を含んでいます.このように類推します.グローバル環境に至るまで、グローバル環境は常にドメインチェーンの最後の対象となります.
へへへ、この説明を見て、目まいがしますか?角度を変えて考えてもいいかもしれません.javascriptの中で、すべての属性と方法はいずれかの対象に属しています.javascriptの中では、すべての方法や属性の呼び出しはobj.method()です.javascript解像度は関数の機能領域の上層作用領域に探して、window全体の環境まで、本当に見つけられないのはデフォルトでwindowオブジェクトに授与します.
はい、今日の内容はこんなに多く書きました.Javascriptが簡単に見える対象を一つずつ作って、こんなに多くの知識を伸ばすことができるとは思いませんでした.このような点を吟味して、面に行く研究方法はなかなかいいです.最近はjavaが多すぎます.(最近は新しいシリーズを作りたいです.ずっと作りたいシリーズです.でも、一人の人間はエネルギーに限界があると言われました.やはり先に書き終わっていないものを書き終わります.)javascripを書く情熱が足りなくなりました.フルタイムでフロントエンドの環境を作りたいです.でも、javaも面白いです.最近友達と交流してから、ますます力を入れて、javaEEの枠組みを3セット書き終わりました.