最近、タオバオのインタビュー中に誰かの体験談をネットで読んだのですが、よくわからないことが多かったので、いくつかの問題について理解を深めるために記事を書きました。
この記事で言及されている質問は、「JavaScript はどのように継承を実装するのですか?」です。
以下に、インターネット上で見つけた、印象を深めるためのいくつかの方法と例を説明します。
JavaScript の関数は関数定義に使用されるだけでなく、クラス定義にも使用できることがわかっています。
JavaScript の継承は少し奇妙です。C や一部のオブジェクト指向言語とは異なり、パブリック、プライベート、その他のアクセス制御の変更はなく、継承を示すインプリメントやその他の特定のシンボルもありません。
JavaScript クラスの継承については、次の例を参照してください。
上記の例では、いくつかの属性とメソッドを含む person クラスが最初に宣言され、次に、base 属性を持つ Programmer クラスが宣言されます。この属性は必須ではありませんが、仕様と将来のためです。オブジェクトが継承するクラスを検索するときにこれを記述し、その person クラスをプログラマのプロトタイプ オブジェクト (プロトタイプ) にコピーすることで、クラスの継承を実現する必要があります。
JavaScript でクラスと継承のいくつかの原則をシミュレートします
オブジェクト指向言語では、クラスを使用してカスタム オブジェクトを作成します。しかし、JavaScript ではすべてがオブジェクトなので、カスタム オブジェクトを作成するにはどうすればよいでしょうか?
これには、プロトタイプという別の概念の導入が必要です。新しく作成されたカスタム オブジェクトはすべて、このテンプレート (プロトタイプ) のコピーです (実際にはコピーではなく、リンクですが、このリンクは表示されません)。コピーのように感じます)。
プロトタイプを使用してカスタム オブジェクトを作成する例を見てみましょう:
コードをコピー
コードは次のとおりです:
When the code var zhang = new Person("ZhangSan", "man") is executed, the following things are actually done internally:
Create a blank object (new Object()).
Copy the attributes (key-value pairs) in Person.prototype to this empty object (as we mentioned earlier, the internal implementation is not a copy but a hidden link).
Pass this object into the constructor through the this keyword and execute the constructor.
Assign this object to variable zhang.
All work done.
In order to prove that the prototype template is not copied into the instantiated object, but is a way of linking, please see the following code:
In the above example, if it is only obtained by copying, after deleting the age attribute, the object will not exist. However, the age attribute in the example can still be output or overwritten. The previous value indicates that we have only deleted the attribute with the same name in the subclass, and the age attribute in the parent class still exists in the object through an invisible link.
How to implement simple inheritance in JavaScript?
The following example will create an employee class Employee, which inherits all the properties in the prototype prototype from Person.
Of course to summarize, the inheritance mechanism in JavaScript is only based on simulation. Compared with some object-oriented languages, it is rough and has some flaws. However, in general, this still does not slow down front-end development. author’s enthusiasm in this regard.