オブジェクトプロトタイププロパティとハンターXハンター


最近、私は継承とプロトタイプチェーンについて学びました.あなたが私のポストを読んだならば、あなたはすでに私がJavaScriptの基礎に飛び込んでいるということを知っています.あなたは、おそらく私が巨大なハンターXハンターファンであるということを知りません.私は実際にハンターのプロトタイプオブジェクトを作成することによって私の学習を置く.

関数コンストラクタ


関数コンストラクタは、特定の種類のオブジェクトの青写真として見ることができます.規約は、関数のコンストラクターを大文字で命名することです.たとえば、私の関数のコンストラクタは、ハンターを作成する青写真です.
すべてのハンターが2つのパラメータを取ると宣言しますname and hatsu (または身近な人のための特別な力).それぞれのハンターはpowerLevel 100.今、我々のハンターに若干の能力を加えましょう.
const Hunter = function(name, hatsu) {
    this.name = name;
    this.hatsu = hatsu;
    this.powerLevel = 100;
};
Hunter.prototype.charge = function(number) {
    if (typeof number !== 'number') {
        console.log('Please enter a number');
        return;
    }
    this.powerLevel += (100 * number);
    console.log(this.name + ' power level at ' + this.powerLevel);
};

Hunter.prototype.useHatsu = function() {
    if (this.powerLevel >= 300) {
        console.log(this.name + ' used ' + this.hatsu); 
        this.powerLevel = 0;
    } else {
        console.log(this.name + ' needs to charge.');
    };
};
を使用してprototype メソッドを格納するプロパティcharge and useHatsu すべての将来のハンターは、能力をチャージして、彼らの力を使う能力を持ちます.これらの関数をコンストラクタで宣言できます.それは、作成された各々の新しいハンターがそれ自身であるということを意味しますcharge and useHatsu メソッド.それは少し過剰です、私は私がちょうどそれにアクセスするために各々のハンターを必要とする方法を所有するために各々のハンターを必要としません.
私は、一度機能をつくって、各々のハンターがHunter.prototype プロパティ.
const gon = new Hunter("Gon", "Ja-Jan-Ken");
const killua = new Hunter("Killua", "Lightningbolt");

console.log(gon)
console.log(killua)

killua.charge(3);
gon.charge(1);
killua.useHatsu();
gon.useHatsu();
あなたがまだコンソールにコードを入力していない場合は、先に行くと、すべてを追加します.作成したオブジェクトを見てください.彼らは、彼らがいることに気づくでしょうname , hatsu , and powerLevel 予想通り.作成した関数がオブジェクトに格納されていないことがわかります.それらはその中に蓄えられる___proto___ プロパティ.

を含める必要はありませんprototype プロトタイプのチェーンのため、関数呼び出しのプロパティ.JavaScriptは、オブジェクトの独自のメソッドとプロパティをチェックします.何も見つからなければ、オブジェクトのプロトタイプをチェックします.それは、それがプロトタイプチェーンの最上位に達するまで、このプロセスを続けますnull .
私は非常に簡単な方法で複雑なトピックをたくさんカバー.何かが意味をなさないならば、出てください.This article by Tim Kadlec 大いに助けた.
読書ありがとう!