この記事では、JavaScript のオブジェクト指向の概念を解析する際の参照型とスコープを主に紹介し、関数の操作範囲を拡張するために必要な呼び出しメソッドと適用メソッドに焦点を当てます。
参照型
。参照型には主に、オブジェクト型、配列型、日付型、正規表現型、関数型などが含まれます。
参照型を使用する場合、参照型からオブジェクト(インスタンス)を生成する必要があります。つまり、参照型はテンプレートに相当します。ある参照型を使用する場合、このテンプレートを使用してオブジェクトを生成する必要があるため、参照型はオブジェクト定義と呼ばれることもあります。
たとえば、誰かの個人情報と行動を定義するために人物オブジェクトを生成する必要がある場合、オブジェクト タイプに依存する必要があります:
var person = new Object(); person.name = "jiangshui"; person.sayName = function(){ console.log(this.name); }
上記の人物オブジェクトは、 new 演算子 " を通じてオブジェクト タイプを使用します。テンプレート」の定義。次に、属性名とメソッドsayNameをこのオブジェクトに追加できます。プロパティとメソッドは Object 型の「機能」であるため、Object などの参照型を通じて作成されたオブジェクトはこれを使用できます。
オブジェクトの作成には必ずしも new 演算子を使用する必要はありません。たとえば、上記のように Object タイプのオブジェクトを作成するには、次の 2 つのメソッドを使用することもできます。
var person = {}; person.name = "jiangshui"; person.sayName = function(){ console.log(this.name); }
または
var person = { name : "jiangshui", sayName : function(){ console.log(this.name); } };
{} 演算子は new Object() と同じ機能を持ち、操作を簡素化します。上記 2 つの書き方にはいくつかの違いがあります。1 つ目は「追加」です。つまり、同じ名前の属性メソッドが既に存在する場合は、それを上書きします。 2 番目のタイプは「置換」です。これは、人物オブジェクトの属性とメソッドが以前に定義されているかどうかに関係なく、このメソッドは以前に定義されたものを新しく定義された内容に完全に置き換えることを意味します。参照型で生成されたオブジェクトはメモリ上の領域に格納され、そのポインタは変数 (person) に保存されるため、2 番目の書き方は、新しいオブジェクト (新しいメモリ領域) を生成し、そのオブジェクトを保存することです。 person 変数 新しいメモリ領域を指すため、以前のメモリ領域が置き換えられます。これを理解することは、後で理解するために非常に重要です。
配列型などの他の参照型の使用法もほぼ同じです。[] を使用してオブジェクトを生成したり、オブジェクトを直接定義したりすることもできます。配列オブジェクトが生成されると、情報コンテンツを配列形式で保存できます。また、オブジェクトは、プッシュ、シフト、ソートなどの配列型で定義されたメソッドを取得し、これらのメソッドを呼び出すことができます。 、例:
var colors = []; colors.push('red','green'); console.log(colors);
上記のコードは、Array 型を通じて配列型オブジェクトを作成し、Array 型で前に定義した Push メソッドを呼び出し、オブジェクトに赤と緑の値を追加します。 、最後にコンソールに出力すると確認できます。
メソッドの呼び出しと適用これら 2 つのメソッドは Function タイプによって提供されます。つまり、関数で使用できます。 call メソッドと apply メソッドは同じ機能を持ちます。つまり、関数の操作範囲を拡張できます。違いは、call を使用する場合、関数に渡されるパラメーターを 1 つずつリストする必要があるのに対し、apply メソッドはその必要がないことです。このようにして、独自の機能の要件に応じて呼び出しを使用するか適用するかを決定できます。
関数が実行されるスコープを拡張するとはどういう意味ですか?例を挙げれば理解できるでしょう。
このように理解できます。関数はコンテナー (スコープ) にラップされており、このコンテナーにはいくつかの変数やその他のものがあります。関数が実行されるとき、これらの変数を呼び出すときなどに、このものが検索されます。現在のコンテナ。このコンテナは、実際には、より大きなコンテナ内にラップされています。現在の小さなコンテナが存在しない場合、関数は、最大のコンテナ ウィンドウ オブジェクトが見つかるまで、より大きなコンテナ内でそれを検索します。ただし、関数が現在の小さなコンテナーで実行されており、対応する変数が小さなコンテナーにある場合、それらが大きなコンテナーにある場合でも、関数は独自のコンテナー内の変数を呼び出します。
call メソッドと apply メソッドは、この問題を解決し、コンテナーの制限を突破するためのものです。先ほどの例では、
var person = { name : "jiangshui", sayName : function(){ console.log(this.name); } };
Chromeのコンソールを開いて貼り付けて実行し、person.sayName()を実行すると
このとき、personは作成されたコンテナ SayName メソッド (関数) は、実行時に person スコープで実行される必要があります。最下部で直接実行した場合、つまり window のスコープで実行した場合、sayName メソッドが window の下で定義されていないため、未定義エラーが報告されます。内部の this ポインターは特別なもので、現在のスコープを指します。this.name の意味は、現在のスコープの下で名前の値を呼び出すことです。
次に、ウィンドウ オブジェクトに name 属性を追加します:
window.name = "yujiangshui";
、または直接
name = "yujiangshui";
因为 window 是最大的容器,所以 window 可以省略掉,所有定义的属性或者变量,都挂靠到 window 上面去了,不信可以看:
那现在我们就想在 window 这个大容器下面,运行 person 小容器里面的 sayName 方法,就需要用 call 或 apply 来扩充 sayName 方法的作用域。执行下面语句:
person.sayName.call(window);
或者
person.sayName.call(this);
输出的结果都是一样的,你也可以换用 apply 看看效果,因为这个 demo 太简单的,不需要传递参数,所以 call 和 apply 功能效果就完全一致了。
解释一下上面代码,sayName 首先是 Function 类型的实例,也就具有了 call 方法和 apply 方法,call 和 apply 方法既然是 Function 类型的方法,所以就需要用这种方式调用 person.sayName.call(window) 而不是什么 person.sayName().call(window) 之类的。
然后 call 和 apply 方法的参数,就是一个作用域(对象),表示将前面的函数在传递进去的作用域下面运行。将 window 这对象传递进去之后,sayName 方法中的 this.name 指向的就是 window.name,于是就扩充了作用域。
为什么传递 window 和 this 都是一样的效果?因为我们当前执行这个函数的位置是 window,前面说过 this 指针指向的是当前作用域,所以 this 指向的就是 window,所以就等于 window。
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
设计模式中的组合模式在JavaScript程序构建中的使用(高级篇)
详细解读JavaScript设计模式开发中的桥接模式(高级篇)
以上がJavaScript オブジェクト指向の概念におけるオブジェクトのタイプとスコープの包括的な分析 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

Dreamweaver Mac版
ビジュアル Web 開発ツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ホットトピック









