オブジェクト指向 JavaScript の 3 つの基本特性の紹介

青灯夜游
リリース: 2020-10-21 17:53:25
転載
3708 人が閲覧しました

オブジェクト指向 JavaScript の 3 つの基本特性の紹介

オブジェクト指向について学んだ学生は、オブジェクト指向の 3 つの基本特性がカプセル化、継承、ポリモーフィズムであることを知っているはずですが、これら 3 つについてはあまり知らないかもしれません。言葉。フロントエンドの場合、最も公開されているのは encapsulationinheritance ですが、ポリモーフィズムはあまり理解されていない可能性があります。

カプセル化

カプセル化について話す前に、まずカプセル化とは何かを理解しましょう。

カプセル化とは

カプセル化: オブジェクトをプログラム オブジェクトで実行するために必要なリソースをカプセル化します - 基本上記はメソッドとデータです。オブジェクトは「そのインターフェイスを公開」します。これらのインターフェイスにアタッチされている他のオブジェクトは、オブジェクトによって実装されているメソッドを気にせずにこのオブジェクトを使用できます。コンセプトは「やり方を教えないで、ただやってみろ。」 オブジェクトは自己完結型の原子と考えることができます。オブジェクト インターフェイスには、パブリック メソッドと初期化データが含まれます。 (Baidu Encyclopedia から抜粋)

カプセル化についての私の理解では、抽出という別のステップがあるかもしれません。まず第一に、次のペアのどの属性メソッドから抽象化する必要があるかを知る必要があります。これらをベースとして、より適切なパッケージ化を行うことができます。

カプセル化は、そのプロパティとメソッドをカプセル化することに他なりません。

  1. #クラス: オブジェクトのプロパティと動作をカプセル化します

  2. #メソッド: 特定の論理関数をカプセル化します
  3. アクセスのカプセル化: アクセス変更のカプセル化は、そのアクセス権をカプセル化することに他なりません。
  4. 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
    ログイン後にコピー
Employees

から抽出されたパブリック属性は name です。 age、パブリック メソッドは getInfoseyHi ですが、getInfoseyHi の違いは seyHi static 修飾子は、静的メソッドに変更するために使用されます。seyHi は、Employees クラスにのみ属します。ただし、getInfo メソッドはインスタンスに属します。

static

は、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 つのタイプに分類されます。

多態性式の書き換えとオーバーロード。

オーバーライドとは

オーバーライド

: サブクラスは、同じメソッドを書き換えることなく、親クラスのメソッドを継承できます。ただし、サブクラスが親クラスのメソッドを変更せずに継承するのではなく、メソッドの書き換えが必要となる特定の変更を加えたい場合があります。メソッドのオーバーライドは、メソッドの上書きとも呼ばれます。 (百度百科事典より抜粋)

上記のコードから、

Java

Employees を継承しますが、seyHello はサブクラスとさまざまなニーズを満たすために、サブクラスは親クラスを継承し、seyHello メソッドを書き換えます。したがって、呼び出したときに異なる結果が得られます。サブクラスは親クラスを継承するため、サブクラスも親クラスの getName メソッドを持ちます。

オーバーロードとは

重载就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。(节选自百度百科)

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
ログイン後にコピー

因为JavaScript是没有重载的概念的所以要自己编写逻辑完成重载。

在上面的代码中定义了Employees,ObjEmployees,StringEmployees,NumberEmployees类,在实例化Employees的时候在constructor里面进行了判断,根据参数的不同返回不同的对应的类。

这样完成了一个简单的类重载。

总结

  1. 封装可以隐藏实现细节,使得代码模块化;

  2. 继承可以扩展已存在的代码模块(类),它们的目的都是为了——代码重用。

  3. 多态就是相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。多态分为两种,一种是行为多态与对象的多态。

在编程的是多多运用这个写思想对其编程时很有用的,能够使你的代码达到高复用以及可维护。

相关免费学习推荐:js视频教程

以上がオブジェクト指向 JavaScript の 3 つの基本特性の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
関連するチュートリアル
人気のおすすめ
最新のコース
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート