オブジェクトは JavaScript において非常に重要な要素です。オブジェクトを完全に理解できるかどうかは、JavaScript システム全体の基本的な理解に直接関係します。端的に言えば、JavaScript はオブジェクトの集まりです。 。 (ビープ!)。
以下では、一般的に使用されるオブジェクト作成モードをいくつか紹介します
新しいキーワードを使用して作成
オブジェクト作成の最も基本的な方法は、他のほとんどの言語と同じです。オブジェクトは存在しないので、新しいオブジェクトを作成します。
var gf = new Object(); gf.name = "tangwei"; gf.bar = "c++"; gf.sayWhat = function() { console.log(this.name + "said:love you forever"); }
リテラルを使用して作成
これは適切だと思われますが、変数を定義するこのような複雑で控えめな方法がオタクに好まれるのでしょうか? スクリプト言語として、他の言語と同じスタイルを持つ必要があるため、オブジェクト リテラルの定義方法が登場しました:
var gf = { name : "tangwei", bar : "c++", sayWhat : function() { console.log(this.name + "said:love you forever"); } }
工場出荷時モード
実際、これはオブジェクトを定義するために実際に最も一般的に使用される方法ですが、同様のプロパティを持つオブジェクトを多数持ちたいと考えています (考えるのはとても楽しいです...) どうすればよいでしょうか?それらを 1 つずつ定義すると、大量のコードが生成されることになるため、ファクトリを構築してオブジェクトをバッチで生成してみてはいかがでしょうか。したがって、JavaScript の世界初のインフレータブル ベイビーが誕生します。 。 。いいえ、「ファクトリーモデル」が誕生しました!
function createGf(name, bar) { var o = new Object(); o.name = name; o.bar = bar; o.sayWhat = function() { alert(this.name + "said:love you forever"); } return o; } var gf1 = createGf("bingbing","d"); var gf2 = createGf("mimi","a");
コンストラクター
ファクトリ パターンは、複数の同様のオブジェクトを作成する問題を解決しますが、これらのオブジェクトはすべてオブジェクトから作成されるという問題が再び発生します。現時点では、別のモード、コンストラクター モードに切り替える必要があります:
function Gf(name,bar){ this.name = name; this.bar = bar; this.sayWhat = function(){ alert(this.name + "said:love you forever"); } } var gf1 = new Gf("vivian","f"); var gf2 = new Gf("vivian2","f");
ここでは、上の例の createGf を置き換えるために大文字で始まるコンストラクターを使用します。規則に従って、コンストラクターの最初の文字は大文字にする必要があることに注意してください。ここでは、新しいオブジェクトを作成し、コンストラクターのスコープを新しいオブジェクトに割り当て、コンストラクター内のメソッドを呼び出します。
上記のメソッドには何の問題もないように見えますが、2 つのインスタンスで呼び出されるコンストラクター内のsayWhat メソッドが同じ Function インスタンスではないことがわかります:
console.log(gf1.sayWhat == gf2.sayWhat); //false
同じメソッドを呼び出しても、異なるインスタンスを宣言するのはリソースの無駄です。コンストラクターの外側で、sayWhat 関数を最適化して宣言できます:
function Gf(name,bar){ this.name = name; this.bar = bar; this.sayWhat = sayWhat } function sayWhat(){ alert(this.name + "said:love you forever"); }
これにより、複数のインスタンスが同じメソッド インスタンスを複数回定義する問題は解決されますが、定義したsayWhat はグローバル スコープ メソッドですが、このメソッドを直接呼び出すことはできません。これは少し矛盾しています。特定のカプセル化プロパティを持つオブジェクトをよりエレガントに定義するにはどうすればよいでしょうか? JavaScript プロトタイプ オブジェクト パターンを見てみましょう。
プロトタイプ オブジェクト パターン
プロトタイプ オブジェクトを理解する
関数を作成すると、その関数には、コンストラクターを通じて作成された関数のプロトタイプ オブジェクトを指すプロトタイプ属性が含まれます。平たく言えば、プロトタイプ オブジェクトは、他のオブジェクトに共有プロパティとメソッドを提供するメモリ内のオブジェクトです。
プロトタイプ モードでは、コンストラクターでインスタンス属性を定義する必要はなく、属性情報をプロトタイプ オブジェクトに直接割り当てることができます。
function Gf(){ Gf.prototype.name = "vivian"; Gf.prototype.bar = "c++"; Gf.prototype.sayWhat = function(){ alert(this.name + "said:love you forever"); } } var gf1 = new Gf(); gf1.sayWhat(); var gf2 = new Gf();
コンストラクターとの違いは、ここでの新しいオブジェクトのプロパティとメソッドがすべてのインスタンスで共有できることです。つまり、gf1 と gf2 は同じプロパティとメソッドにアクセスします。プロトタイプ オブジェクトに割り当てる属性に加えて、いくつかの組み込み属性もあります。すべてのプロトタイプ オブジェクトには、プロトタイプ属性を含む関数へのポインターであるコンストラクター属性があります (さらに詳しく説明します)。この舌を巻くプロセスを写真でわかりやすく理解してみましょう:
すべてのオブジェクトにはプロトタイプ オブジェクト (プロトタイプ) があります。プロトタイプ オブジェクトには、プロトタイプ属性を含む関数を指すコンストラクター属性があります。Gf インスタンス gf1 と gf2 には両方とも、プロトタイプ オブジェクトを指す内部属性が含まれています (Firefox ブラウザーで表示)。はプライベート プロパティ プロトです)、オブジェクト内のプロパティにアクセスするときは、まずそのプロパティがインスタンス オブジェクトに存在するかどうかを尋ね、存在しない場合はプロトタイプ オブジェクトを探し続けます。
プロトタイプ オブジェクトを使用する
前の例では、プロトタイプ オブジェクトに属性を追加するときに、各オブジェクトに Gf.prototype を追加する必要があることがわかりました。上記のオブジェクト作成モードでは、リテラルを使用できることがわかりました。オブジェクトを作成します。ここで改善することもできます:
function Gf(){} Gf.prototype = { name : "vivian", bar : "c++", sayWhat : function(){ alert(this.name + "said:love you forever"); } }
ここで特別な注意が必要な点が 1 つあります。関数が定義されるたびに、このオブジェクトも同時にプロトタイプ オブジェクトが作成されるため、コンストラクター属性はオブジェクト Gf を指さなくなりました。新しいコンストラクター属性を取得します。これは、Gf.prototype を使用して元のプロトタイプ オブジェクトを本質的に上書きするため、コンストラクターは新しいオブジェクトのコンストラクター プロパティになり、Gf ではなく Object:
を指します。var gf1 = new Gf(); console.log(gf1.constructor == Gf);//false console.log(gf1.constructor == Object)//true
一般情况下,这个微妙的改变是不会对我们造成影响的,但如果你对constructor有特殊的需求,我们也可以显式的指定下Gf.prototype的constructor属性:
Gf.prototype = { constructor : Gf, name : "vivian", bar : "c++", sayWhat : function() { alert(this.name + "said:love you forever"); } } var gf1 = new Gf(); console.log(gf1.constructor == Gf);//true
通过对原型对象模式的初步了解,我们发现所有的实例对象都共享相同的属性,这是原型模式的基本特点,但往往对于开发者来说这是把“双刃剑”,在实际开发中,我们希望的实例应该是具备自己的属性,这也是在实际开发中很少有人单独使用原型模式的主要原因。
构造函数和原型组合模式
在实际开发中,我们可以使用构造函数来定义对象的属性,使用原型来定义共享的属性和方法,这样我们就可以传递不同的参数来创建出不同的对象,同时又拥有了共享的方法和属性。
function Gf(name,bar){ this.name = name; this.bar = bar; } Gf.prototype = { constructor : Gf, sayWhat : function() { alert(this.name + "said:love you forever"); } } var gf1 = new Gf("vivian", "f"); var gf2 = new Gf("vivian1", "c");
在这个例子中,我们再构造函数中定义了对象各自的属性值,在原型对象中定义了constructor属性和sayWhat函数,这样gf1和gf2属性之间就不会产生影响了。这种模式也是实际开发中最常用的对象定义方式,包括很多JS库(bootstrap等)默认的采用的模式。
以上所述是小编给大家介绍的JavaScript面向对象和原型函数,希望对大家有所帮助。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまな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)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。


ホット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 サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

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

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

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