オブジェクト指向について学んだ学生は、オブジェクト指向の 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 サイトの他の関連記事を参照してください。

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

本篇文章整理了20+Vue面试题分享给大家,同时附上答案解析。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ホットトピック









