ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptには継承がありますか?

JavaScriptには継承がありますか?

WBOY
WBOYオリジナル
2022-04-08 10:21:381833ブラウズ

JavaScript には継承があります。 JavaScript の継承は、既存のクラスに基づいて新しいクラスを作成できるメカニズムです。継承により、サブクラスに柔軟性が提供されます。親クラスのメソッドと変数を再利用でき、プロトタイプ チェーンとコンストラクタを使用して継承を実現できます。

JavaScriptには継承がありますか?

このチュートリアルの動作環境: Windows 10 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。

JavaScript には継承がありますか?

JavaScript には継承がありますか?

JavaScript の継承は、既存のクラスに基づいて新しいクラスを作成できるメカニズムであり、サブクラスが親クラスのメソッドと変数を再利用できる柔軟性を提供します。相続のプロセスは、一般から特殊へのプロセスです。

#JavaScript はどのように継承を実装するのでしょうか?

1. プロトタイプ チェーン

基本的な考え方: プロトタイプを使用して、ある参照型に別の参照型のプロパティとメソッドを継承させます。

コンストラクター、プロトタイプ、インスタンスの関係: 各コンストラクターにはプロトタイプ オブジェクトがあり、プロトタイプ オブジェクトにはコンストラクターへのポインターが含まれ、インスタンスにはプロトタイプ オブジェクトへの内部ポインターが含まれます。

プロトタイプ チェーン実装の継承例:

function SuperType() {
this.property = true;
}
SuperType.prototype.getSuperValue = function() {
return this.property;
}
function subType() {
this.property = false;
}
//继承了SuperType
SubType.prototype = new SuperType();
SubType.prototype.getSubValue = function (){
return this.property;
}
var instance = new SubType();
console.log(instance.getSuperValue());//true

2. コンストラクターの借用

基本的な考え方: サブタイプ コンストラクター内でスーパークラス コンストラクターを呼び出す コンストラクターを実行する関数call() メソッドと apply() メソッドを使用して、新しく作成されたオブジェクトに対して。

例:

function SuperType() {
this.colors = ["red","blue","green"];
}
function SubType() {
SuperType.call(this);//继承了SuperType
}
var instance1 = new SubType();
instance1.colors.push("black");
console.log(instance1.colors);//"red","blue","green","black"
var instance2 = new SubType();
console.log(instance2.colors);//"red","blue","green"

3. 結合継承

基本的な考え方: プロトタイプ チェーンと借用コンストラクター テクノロジを組み合わせて、両方の長所を引き出します。自分の強みに基づいた継承のパターン。

例:

function SuperType(name) {
this.name = name;
this.colors = ["red","blue","green"];
}
SuperType.prototype.sayName = function() {
console.log(this.name);
}
function SubType(name, age) {
SuperType.call(this,name);//继承属性
this.age = age;
}
//继承方法
SubType.prototype = new SuperType();
Subtype.prototype.constructor = Subtype;
Subtype.prototype.sayAge = function() {
console.log(this.age);
}
var instance1 = new SubType("EvanChen",18);
instance1.colors.push("black");
consol.log(instance1.colors);//"red","blue","green","black"
instance1.sayName();//"EvanChen"
instance1.sayAge();//18
var instance2 = new SubType("EvanChen666",20);
console.log(instance2.colors);//"red","blue","green"
instance2.sayName();//"EvanChen666"
instance2.sayAge();//20

4. プロトタイプの継承

基本的な考え方: プロトタイプを使用すると、プロトタイプを使用せずに既存のオブジェクトに基づいて新しいオブジェクトを作成できます。したがって、カスタム タイプを作成する必要があります。

プロトタイプ継承の概念は、次の関数で説明できます:

function object(o) {
function F(){}
F.prototype = o;
return new F();
}

例:

var person = {
name:"EvanChen",
friends:["Shelby","Court","Van"];
};
var anotherPerson = object(person);
anotherPerson.name = "Greg";
anotherPerson.friends.push("Rob");
var yetAnotherPerson = object(person);
yetAnotherPerson.name = "Linda";
yetAnotherPerson.friends.push("Barbie");
console.log(person.friends);//"Shelby","Court","Van","Rob","Barbie"

ECMAScript5 は、新しい Object.create() メソッドを通じてプロトタイプ継承を標準化します。このメソッドは、新しいオブジェクトのプロトタイプとして機能するオブジェクトと、新しいオブジェクトの追加プロパティを定義するオブジェクトという 2 つのパラメーターを受け入れます。

var person = {
name:"EvanChen",
friends:["Shelby","Court","Van"];
};
var anotherPerson = Object.create(person);
anotherPerson.name = "Greg";
anotherPerson.friends.push("Rob");
var yetAnotherPerson = Object.create(person);
yetAnotherPerson.name = "Linda";
yetAnotherPerson.friends.push("Barbie");
console.log(person.friends);//"Shelby","Court","Van","Rob","Barbie"

5. 寄生継承

基本的な考え方: 継承プロセスをカプセル化するためだけに関数を作成し、オブジェクトを内部的に何らかの方法で強化します。本当にすべての作業を行ったかのように戻ってきました。

例:

function createAnother(original) {
var clone = object(original);
clone.sayHi = function () {
alert("hi");
};
return clone;
}
var person = {
name:"EvanChen",
friends:["Shelby","Court","Van"];
};
var anotherPerson = createAnother(person);
anotherPerson.sayHi();///"hi"

6. 寄生結合継承

基本的な考え方: 関数を借用してプロパティを継承し、プロトタイプ チェーンのハイブリッド形式を使用する継承メソッドの基本モデル

# は次のとおりです:

function inheritProperty(subType, superType) {
var prototype = object(superType.prototype);//创建对象
prototype.constructor = subType;//增强对象
subType.prototype = prototype;//指定对象
}

例:

function SuperType(name){
this.name = name;
this.colors = ["red","blue","green"];
}
SuperType.prototype.sayName = function (){
alert(this.name);
};
function SubType(name,age){
SuperType.call(this,name);
this.age = age;
}
inheritProperty(SubType,SuperType);
SubType.prototype.sayAge = function() {
alert(this.age);
}

関連する推奨事項:

JavaScript 学習チュートリアル #

以上がJavaScriptには継承がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。