この例を見てみましょう:
var a = 'グローバル' ;
(関数 () {
alert(a);
var a = 'ローカル';
})(); >
皆さん、まずはこの例を見て、出力は何だと思いますか? 'グローバル'?それとも「地元」?実際、そうではありません。出力は未定義です。これについて話したいだけです。
これには実際にはオブジェクト プロパティ バインディング メカニズムが関係します。すべての JavaScript 関数はオブジェクトであるためです。関数内で宣言された変数は、このオブジェクトの「類似のプロパティ」と見なすことができます。オブジェクトのプロパティのバインディングは、言語では「アーリー バインディング」と「レイト バインディング」に分けられます。
[初期バインディング]
は、オブジェクトをインスタンス化する前にオブジェクトのプロパティとメソッドを定義することを指します。プログラムを解析するときに、事前にマシンコードに変換できます。 C や Java などの一般的な型付け言語はすべて、早期バインディング メカニズムを使用します。また、JavaScript は厳密に型指定された言語ではありません。 「遅延バインディング」メカニズムを使用します。
【Late Binding】
は、プログラムを実行する前にオブジェクトの種類を確認する必要はなく、オブジェクトがプロパティとメソッドをサポートしているかどうかだけを確認することを意味します。バインド前に、ペナルティなしでオブジェクトに対して多数の操作を実行できます。
上記のコードの「事前宣言」現象は、「遅延バインディング」メカニズムによって説明できます。関数のスコープ内では、すべての変数は「遅延バインド」されます。 つまり、ステートメントはトップレベルです。したがって、上記のコードは次のコードと一致しています:
alert(a);
a = 'ローカル';
})(); >
alert(a) の前には、値を代入せずに a だけが宣言されていました。したがって、結果は想像できます。
RT: この記事で説明するのは、JavaScript でクラスとオブジェクトを定義するいくつかの方法です。 - ステートメント: 以下の内容のほとんどは「JavaScript Advanced Programming」から来ていますが、個人的な説明方法は異なります -- >
オブジェクトを構築するために直接量を使用するのが最も基本的な方法です。しかし、デメリットもたくさんあります。
コードをコピーします
オブジェクト Obj を構築します。これには属性名とメソッド showName があります。しかし、別の同様のオブジェクトを構築したい場合はどうすればよいでしょうか?もう一度繰り返さなければなりませんか?
いいえ! 、特定の型のオブジェクトを返すファクトリ関数を使用して実装できます。工場と同じように、パイプラインは必要な特定の種類の結果を出力します。
【ファクトリメソッド】
コードをコピー
多くの人はこれを使用しませんファクトリー関数 オブジェクトを構築する形式として。理由の 1 つはセマンティクスです。演算子 new を使用して構築するほど形式的ではありません。もう 1 つ大きな理由があります。このファクトリはオブジェクトを生成するたびに新しい関数 showName() を作成するためです。つまり、各オブジェクトのバージョンは異なりますが、実際には同じ関数を共有します。
ファクトリ関数の外で showName を定義し、属性を通じてメソッドを指す人もいます。これにより、この問題を回避できます。
コードをコピー
function showName () {
残念ながら、このメソッドでは showName() 関数がオブジェクトのメソッドのように見えません。
[コンストラクターメソッド]
このメソッドは、上記のファクトリー関数の最初の問題、つまり新しい演算子が存在しない問題を解決するものです。しかし、それでも 2 番目の問題は解決できません。見てみましょう。
function Obj(name) {
this.name = 名前;
this.showName = function () {
alert(this.name);
}
var obj('obj_one'); 🎜>var obj2 = new Obj('obj_two');
利点は、new 演算子が自動的にオブジェクトを作成するため、コンストラクターで新しいオブジェクトを作成する必要がないことです。が実行され、これを介してのみこのオブジェクトにアクセスします。したがって、 this を通じてこのオブジェクトに直接値を割り当てることができます。また、これはデフォルトでコンストラクターの戻り値を指すため、return する必要はありません。
残念ながら、ファクトリ関数と同様にメソッド関数を繰り返し生成する問題はまだ解決できません。
[プロトタイプ手法]
この手法は、上記の手法と比較して、メソッド関数が複数回生成される問題を解決できるという大きな利点があります。オブジェクトのプロトタイプ プロパティを利用します。オブジェクト インスタンスをオーバーライドするにはプロトタイプに依存します。
Obj.prototype.showName = function () {
alert(this.name);
var obj1 = new Obj();
var obj2 = new Obj();
プロトタイプに依存してコンストラクターを書き換えます。そのため、プロパティとメソッドは両方ともプロトタイプ参照を通じて与えられます。一度作成されました。残念ながら、この方法には 2 つの致命的な問題があります。
1.プロトタイプはコンストラクターのスコープ外にあるため、オブジェクトの構築時に必要なプロパティを記述する方法はありません。また、パラメーターを渡してオブジェクトを作成するときにプロパティ値を記述する方法はありません。値は、オブジェクトの作成後にのみオーバーライドできます。
Obj.prototype.showName = function () {
alert(this.name);
}
var obj1 = new Obj();
var obj2 = new Obj('C') ;
alert(obj1.flag); // A,B,C
alert(obj2.flag); //A,B,C
フラグ属性の場合object をポイントしている場合、obj1 と obj2 の両方のインスタンスがそれを共有します。obj1 の flag 属性のみを変更した場合でも、その変更はインスタンス obj2 に表示されます。
この問題に直面して、[コンストラクター メソッド] と [プロトタイプ メソッド] を組み合わせて補完する必要があるかどうかを考えなければなりません。 。 。
コンストラクター メソッドを使用してプロパティを作成できるようにし、プロトタイプ メソッドを使用してメソッドを作成できます:
コードをコピー
showName : function () {
alert(this.name);
}
var obj1 = new Obj();
var obj2 = new Obj();
obj1.flag.push('C'); // A,B,C
alert(obj2.flag); //A,B
このメソッドは、プロトタイプとコンストラクターの利点を効果的に組み合わせたもので、現在最も使用されているメソッドです。副作用が最も少ないです。
しかし、完璧を追求する人の中には、視覚的にまだ要件を満たしていないため、まだ満足していない人もいます。プロトタイプを介してメソッドを作成するプロセスは、依然として視覚的に人々にインスタンス メソッドのように見えないと感じさせるためです (特に、 )
したがって、プロトタイプをアクティブにし、それをコンストラクターに追加して、コンストラクターをより視覚的に統合することができます。この一連の処理は一度の判断だけで完了します。
コードをコピー
コードは次のとおりです:
var Obj = function (name) {
this.name = name;
this.flag = new Array('A', 'B'); _init == '未定義') {
Obj.prototype = {
showName : function () {
alert(this.name)
}
}; = true;
}
}
上記と同様に、_init をフラグとして使用して、プロトタイプに対してメソッドが作成されたかどうかを判断します。その場合、実行されません。実際、メソッドは依然としてプロトタイプを通じて作成されており、本質的には変わりません。唯一の違いは、このコンストラクターが「統一」されているように見えることです。
次の記事で解決策を説明します。
実際、使いやすさという点では、個人的にはこのように判断する必要はないと感じています。 。 。笑 ^_^

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1
使いやすく無料のコードエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版
中国語版、とても使いやすい
