検索
ホームページウェブフロントエンドフロントエンドQ&AJavaScript はどのように継承を実装するのでしょうか?

方法: 1. プロトタイプを使用して、ある参照型に別の参照型のプロパティとメソッドを継承させます。 2. コンストラクターを借用し、call() と apply( を使用してサブクラス コンストラクター内のスーパークラス コンストラクターを呼び出します) ) 新しく作成されたオブジェクトに対してコンストラクターを実行できます; 3. プロトタイプ チェーンとコンストラクターを借用するテクノロジを組み合わせて、継承を実現します。

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

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

前書き: ほとんどの OO 言語は、インターフェイスの継承と実装の継承という 2 つの継承方法をサポートしています。ただし、インターフェイスの継承は ECMAScript では実装できません。ECMAScript は実装の継承のみをサポートしており、その実装の継承は主に次のものに依存しています。プロトタイプチェーンを実現します。

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 までご連絡ください。
HTML5を使用してどのタイプのオーディオファイルを再生できますか?HTML5を使用してどのタイプのオーディオファイルを再生できますか?Apr 30, 2025 pm 02:59 PM

この記事では、HTML5オーディオフォーマットとクロスブラウザー互換性について説明します。 MP3、WAV、OGG、AAC、およびWebMをカバーし、より広いアクセシビリティのために複数のソースとフォールバックを使用することを提案します。

SVGとCanvas HTML5要素の違いは?SVGとCanvas HTML5要素の違いは?Apr 30, 2025 pm 02:58 PM

SVGおよびCanvasは、Webグラフィックス用のHTML5要素です。ベクターベースであるSVGは、スケーラビリティとインタラクティブ性に優れていますが、ピクセルベースのキャンバスはゲームなどのパフォーマンス集約型アプリケーションに適しています。

HTML5を使用してドラッグアンドドロップは可能ですか?HTML5を使用してドラッグアンドドロップは可能ですか?Apr 30, 2025 pm 02:57 PM

HTML5は、特定のイベントと属性でドラッグアンドドロップを有効にし、カスタマイズを可能にしますが、古いバージョンやモバイルデバイスでブラウザの互換性の問題に直面します。

< meter>の違いは何ですかタグと< Progress>タグ?< meter>の違いは何ですかタグと< Progress>タグ?Apr 30, 2025 pm 02:56 PM

この記事では、HTMLの< Meter>の違いについて説明します。 and< Progress>タグ、それぞれスカラー値とタスクの進行状況を表示するために使用されます。

以下のデータをHTML5の表形式に変換しますか?以下のデータをHTML5の表形式に変換しますか?Apr 30, 2025 pm 02:54 PM

これは、レスポンシブデザインの例と戦略、スタイリングのベストプラクティス、テーブル構造内で使用されるセマンティックHTML5タグを含む、HTML5を使用して表形式に変換されたデータを示します:<!doctype HTML> < html lang =&

画像マップを定義しますか?画像マップを定義しますか?Apr 30, 2025 pm 02:53 PM

この記事では、Webデザインの画像マップ、ナビゲーションの強化やエンゲージメントなどの利点、および作成のためのツールについて説明します。

< datalist>タグと< select>同じタグ?< datalist>タグと< select>同じタグ?Apr 30, 2025 pm 02:52 PM

この記事では、< datalist>の違いについて説明します。 and< select>タグ、機能、ユーザーの相互作用、さまざまなWeb開発シナリオの適合性に焦点を当てています。

< figure>の違いは何ですかタグと< img>タグ?< figure>の違いは何ですかタグと< img>タグ?Apr 30, 2025 pm 02:50 PM

この記事では、HTMLの< figure>の違いについて説明します。および< img>タグ、目的、使用、セマンティックの利点に焦点を当てています。主な議論は、< figure>より良い構造とアクセスを提供します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

DVWA

DVWA

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