オブジェクト指向について学んだ学生は、オブジェクト指向の 3 つの基本特性がカプセル化、継承、ポリモーフィズムであることを知っているはずですが、これら 3 つについてはあまり知らないかもしれません。言葉。フロントエンドの場合、最も公開されているのは encapsulation
と inheritance
ですが、ポリモーフィズムはあまり理解されていない可能性があります。
カプセル化
カプセル化について話す前に、まずカプセル化とは何かを理解しましょう。
カプセル化とは
カプセル化: オブジェクトをプログラム オブジェクトで実行するために必要なリソースをカプセル化します - 基本上記はメソッドとデータです。オブジェクトは「そのインターフェイスを公開」します。これらのインターフェイスにアタッチされている他のオブジェクトは、オブジェクトによって実装されているメソッドを気にせずにこのオブジェクトを使用できます。コンセプトは「やり方を教えないで、ただやってみろ。」 オブジェクトは自己完結型の原子と考えることができます。オブジェクト インターフェイスには、パブリック メソッドと初期化データが含まれます。 (Baidu Encyclopedia から抜粋)
カプセル化についての私の理解では、抽出
という別のステップがあるかもしれません。まず第一に、次のペアのどの属性メソッドから抽象化する必要があるかを知る必要があります。これらをベースとして、より適切なパッケージ化を行うことができます。
カプセル化は、そのプロパティとメソッドをカプセル化することに他なりません。
- #クラス: オブジェクトのプロパティと動作をカプセル化します #メソッド: 特定の論理関数をカプセル化します
- アクセスのカプセル化: アクセス変更のカプセル化は、そのアクセス権をカプセル化することに他なりません。
-
class Employees { constructor(name,age){ this.name = name; this.age = age; } getInfo(){ let {name,age} = this; return {name,age}; } static seyHi(){ console.log("Hi"); } } let lisi = new Employees("Aaron",18); lisi.seyHi(); // lisi.seyHi is not a function lisi.getInfo(); // {name: "Aaron", age: 18} Employees.seyHi(); // Hi
から抽出されたパブリック属性は name
です。 age
、パブリック メソッドは getInfo
、seyHi
ですが、getInfo
と seyHi
の違いは seyHi
static
修飾子は、静的メソッドに変更するために使用されます。seyHi
は、Employees
クラスにのみ属します。ただし、getInfo
メソッドはインスタンスに属します。
は、seyHi
メソッドのアクセス権をカプセル化するためにここで使用されます。 別の例を挙げてみましょう。
Promise.then() // Promise.then is not a function let p1 = new Promise(() => {}) p1.then(); // Promise {<pending>} Promise.all([1]); // Promise {<resolved>: Array(1)}
上記のコードからわかるように、
Promise は static
を使用してメソッドのアクセス許可をカプセル化します。
継承
: 継承といえば馴染みのないものではありません。継承により、サブクラスに親クラスのさまざまなパブリック プロパティを持たせることができます属性とパブリックメソッド
。同じコードを再度記述する必要はありません。サブカテゴリに親カテゴリを継承させながら、一部の属性を再定義して一部のメソッドをオーバーライドすることができます。つまり、親カテゴリの元の属性とメソッドを上書きして、親カテゴリから異なる関数を取得できるようにします。 (Baidu百科事典より抜粋) サブクラスが親クラスを継承すると、サブクラスは親クラスのプロパティとメソッドを持ちますが、独自のプロパティとメソッドも持ちます。サブクラスは親クラス以上である必要があり、親クラス以上である必要があります。
class Employees { constructor(name){ this.name = name; } getName(){ console.log(this.name) } static seyHi(){ console.log("Hi"); } } class Java extends Employees{ constructor(name){ super(name); } work(){ console.log("做后台工作"); } } let java = new Java("Aaron"); java.getName(); java.work(); // java.seyHi(); // java.seyHi is not a function
上記の例から、継承では親クラスの静的メソッドは継承されず、親クラスのパブリック プロパティとメソッドのみが継承されることがわかります。これには注意が必要です。
継承後、サブクラスには
getName メソッドだけでなく、独自の worker
メソッドもあります。
ポリモーフィズム
: 文字通りの意味は「複数の状態」であり、サブクラス型のポインタを親ポインタに割り当てることができます。クラスタイプに。 (Baidu百科事典より抜粋) 端的に言うと、ポリモーフィズムは同じもので、同じメソッドが呼び出され、パラメータが同じ場合、動作が異なります。ポリモーフィズムは、動作ポリモーフィズムとオブジェクト ポリモーフィズムの 2 つのタイプに分類されます。
多態性式の書き換えとオーバーロード。
オーバーライドとは
オーバーライド: サブクラスは、同じメソッドを書き換えることなく、親クラスのメソッドを継承できます。ただし、サブクラスが親クラスのメソッドを変更せずに継承するのではなく、メソッドの書き換えが必要となる特定の変更を加えたい場合があります。メソッドのオーバーライドは、メソッドの上書きとも呼ばれます。 (百度百科事典より抜粋) class Employees {
constructor(name){
this.name = name;
}
seyHello(){
console.log("Hello")
}
getName(){
console.log(this.name);
}
}
class Java extends Employees{
constructor(name){
super(name);
}
seyHello(){
console.log(`Hello,我的名字是${this.name},我是做Java工作的。`)
}
}
const employees = new Employees("Aaron");
const java = new Java("Leo");
employees.seyHello(); // Hello
java.seyHello(); // Hello,我的名字是Leo,我是做Java工作的。
employees.getName(); // Aaron
java.getName(); // Leo
上記のコードから、
は Employees
を継承しますが、seyHello はサブクラスとさまざまなニーズを満たすために、サブクラスは親クラスを継承し、
seyHello メソッドを書き換えます。したがって、呼び出したときに異なる結果が得られます。サブクラスは親クラスを継承するため、サブクラスも親クラスの
getName メソッドを持ちます。
重载就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。(节选自百度百科) 因为JavaScript是没有重载的概念的所以要自己编写逻辑完成重载。 在上面的代码中定义了 这样完成了一个简单的类重载。 封装可以隐藏实现细节,使得代码模块化; 继承可以扩展已存在的代码模块(类),它们的目的都是为了——代码重用。 多态就是相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。多态分为两种,一种是行为多态与对象的多态。 在编程的是多多运用这个写思想对其编程时很有用的,能够使你的代码达到高复用以及可维护。 相关免费学习推荐:js视频教程class Employees {
constructor(arg){
let obj = null;
switch(typeof arg)
{
case "string":
obj = new StringEmployees(arg);
break;
case "object":
obj = new ObjEmployees(ObjEmployees);
break;
case "number":
obj = new NumberEmployees(ObjEmployees);
break;
}
return obj;
}
}
class ObjEmployees {
constructor(arg){
console.log("ObjEmployees")
}
}
class StringEmployees {
constructor(arg){
console.log("StringEmployees")
}
}
class NumberEmployees {
constructor(arg){
console.log("NumberEmployees")
}
}
new Employees({}) // ObjEmployees
new Employees("123456") // StringEmployees
new Employees(987654) // NumberEmployees
Employees
,ObjEmployees
,StringEmployees
,NumberEmployees
类,在实例化Employees
的时候在constructor
里面进行了判断,根据参数的不同返回不同的对应的类。总结
以上がオブジェクト指向 JavaScript の 3 つの基本特性の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。

JavaScriptフレームワークのパワーは、開発を簡素化し、ユーザーエクスペリエンスとアプリケーションのパフォーマンスを向上させることにあります。フレームワークを選択するときは、次のことを検討してください。1。プロジェクトのサイズと複雑さ、2。チームエクスペリエンス、3。エコシステムとコミュニティサポート。

はじめに私はあなたがそれを奇妙に思うかもしれないことを知っています、JavaScript、C、およびブラウザは正確に何をしなければなりませんか?彼らは無関係であるように見えますが、実際、彼らは現代のウェブ開発において非常に重要な役割を果たしています。今日は、これら3つの間の密接なつながりについて説明します。この記事を通して、JavaScriptがブラウザでどのように実行されるか、ブラウザエンジンでのCの役割、およびそれらが協力してWebページのレンダリングと相互作用を駆動する方法を学びます。私たちは皆、JavaScriptとブラウザの関係を知っています。 JavaScriptは、フロントエンド開発のコア言語です。ブラウザで直接実行され、Webページが鮮明で興味深いものになります。なぜJavascrを疑問に思ったことがありますか

node.jsは、主にストリームのおかげで、効率的なI/Oで優れています。 ストリームはデータを段階的に処理し、メモリの過負荷を回避します。大きなファイル、ネットワークタスク、リアルタイムアプリケーションの場合。ストリームとTypeScriptのタイプの安全性を組み合わせることで、パワーが作成されます

PythonとJavaScriptのパフォーマンスと効率の違いは、主に以下に反映されています。1)解釈された言語として、Pythonはゆっくりと実行されますが、開発効率が高く、迅速なプロトタイプ開発に適しています。 2)JavaScriptはブラウザ内の単一のスレッドに限定されていますが、マルチスレッドおよび非同期I/Oを使用してnode.jsのパフォーマンスを改善でき、両方とも実際のプロジェクトで利点があります。

JavaScriptは1995年に発信され、Brandon Ikeによって作成され、言語をCに実現しました。 2。JavaScriptのメモリ管理とパフォーマンスの最適化は、C言語に依存しています。 3. C言語のクロスプラットフォーム機能は、さまざまなオペレーティングシステムでJavaScriptを効率的に実行するのに役立ちます。

JavaScriptはブラウザとnode.js環境で実行され、JavaScriptエンジンに依存してコードを解析および実行します。 1)解析段階で抽象的構文ツリー(AST)を生成します。 2)ASTをコンパイル段階のバイトコードまたはマシンコードに変換します。 3)実行段階でコンパイルされたコードを実行します。

PythonとJavaScriptの将来の傾向には、1。Pythonが科学コンピューティングの分野での位置を統合し、AI、2。JavaScriptはWebテクノロジーの開発を促進します。どちらもそれぞれのフィールドでアプリケーションシナリオを拡大し続け、パフォーマンスをより多くのブレークスルーを行います。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

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

ホットトピック









