1. クラスクラスはオブジェクトを作成するためのテンプレートです。 関数 Point(x, y) { this.x = x; y = y; } Point.prototype.toString = 関数 () { '(' + this.x + ', ' + this.y + ')' を返します。 }; var p = 新しいポイント(1, 1);
次のように: クラス Point { コンストラクタ(x, y) { this.x = x; y = y; } 文字列を渡す '(' + this.x + ', ' + this.y + ')' を返します。 } } クラスのデータ型は関数であり、それ自体は関数を指すコンストラクターです。 // ES5 関数宣言 function Point() { //... } // ES6 クラス宣言 class Point { //.... コンストラクタ() { } } typeof Point // "関数" Point === Point.prototype.constructor // true クラスで定義されたメソッドは クラス Point { コンストラクタ(x, y) { this.x = x; y = y; } 文字列を渡す '(' + this.x + ', ' + this.y + ')' を返します。 } } ポイント.プロトタイプ = { //.... 文字列を変換する() } var p = 新しいポイント(1, 1); p.toString() // (1,1) クラスを定義する別の方法はクラス式を使うことである。 // 名前のない/匿名クラス let Point = class { コンストラクタ(x, y) { this.x = x; y = y; } }; Point.name // ポイント 関数宣言とクラス宣言には重要な違いがあります。関数宣言はホイストされますが、クラス宣言はホイストされません。 > let p = new Point(); // 昇格してもエラーは報告されません> function Point() {} > > let p = new Point(); // エラー、ReferenceError > クラス Point {} > 1.1 コンストラクタ() クラスには クラス Point { } // クラス Point を自動的に追加します { コンストラクタ() {} } 1.2 ゲッターとセッター
クラスユーザー{ コンストラクタ(名前) { this.name = 名前; } 名前を取得する() { this.name を返します。 } 名前(値)を設定する{ this.name = 値; } } 1.3 これクラス メソッド内の クラスユーザー{ コンストラクタ(名前) { this.name = 名前; } プリント名(){ console.log('名前は' + this.nameです) } } 定数ユーザー = 新しいユーザー('jack') user.printName() // 名前はjackです const { printName } = ユーザー; printName() // エラー 未定義のプロパティを読み取ることができません (読み取り 'name') エラーなしで個別に呼び出す場合、1 つの方法はコンストラクターで クラスユーザー{ コンストラクタ(名前) { this.name = 名前; this.printName = this.printName.bind(this); } プリント名(){ console.log('名前は' + this.nameです) } } 定数ユーザー = 新しいユーザー('jack') const { printName } = ユーザー; printName() // 名前はジャック
さらに、矢印関数内の this は常にそれが定義されているオブジェクトを参照するため、矢印関数を使用することもできます。 クラスユーザー{ コンストラクタ(名前) { this.name = 名前; } プリント名 = () => { console.log('名前は' + this.nameです) } } 定数ユーザー = 新しいユーザー('jack') const { printName } = ユーザー; printName() // 名前はジャック 1.4 静的プロパティ静的プロパティは、インスタンス オブジェクト クラスユーザー{ } ユーザー.prop = 1; ユーザー.prop // 1 1.5 静的メソッドクラス内に静的メソッドを定義できます。メソッドはオブジェクト インスタンスによって継承されず、クラスを通じて直接呼び出されます。 クラス Utils { 静的printInfo() { this.info(); } 静的情報() { コンソールにログ出力します。 } } Utils.printInfo() // こんにちは メソッドの呼び出しスコープの制限(private や public など)については、 2. 継承
継承する場合、サブクラスは クラスPoint3DはPointを拡張します{ コンストラクタ(x, y, z) { super(x, y); // 親クラスのコンストラクター(x, y)を呼び出す this.z = z; } 文字列を渡す return super.toString() + ' ' + this.z; // 親クラスのtoString()を呼び出す } } 親クラスの静的メソッドは子クラスにも継承されます。 クラス親{ 静的情報() { console.log('こんにちは世界'); } } クラスChildはParentを拡張します{ } Child.info() // こんにちは世界 2.1 スーパーキーワード
クラス 親 {} クラスChildはParentを拡張します{ コンストラクタ() { 素晴らしい(); } } サブクラスの通常のメソッドで クラス親{ コンストラクタ() { 1.x = 1; を出力します。 これ.y = 10 } 親を印刷する(){ コンソールにログ出力します。 } 印刷(){ コンソールにログ出力します。 } } クラスChildはParentを拡張します{ コンストラクタ() { 素晴らしい(); 2 を 0 にします。 } m() { スーパープリント(); } } c = new Child(); c.printParent() // 10 センチメートル() // 2 2.2 _proto_ とプロトタイプ初めて
以下はプロトタイプを持つ組み込みオブジェクトの一部です。 上記の説明に従って、次のコードを見てください var obj = {} // var obj = new Object() と同等 // obj.__proto__ は Object コンストラクタのプロトタイプを指します obj.__proto__ === Object.prototype // true // obj.toString は Object.prototype から継承されたメソッドを呼び出します obj.toString === obj.__proto__.toString // true // 配列 var arr = [] arr.__proto__ === Array.prototype // true
関数 Foo(){} var f = new Foo(); f.__proto__ === Foo.prototype // 真 Foo.__proto__ === Function.prototype // true 2.3 継承における__proto__コンストラクター関数の構文糖衣として、クラスには
クラス親{ } クラスChildはParentを拡張します{ } Child.__proto__ === Parent // true Child.prototype.__proto__ === Parent.prototype // true 2.4 継承されたインスタンス内の__proto__サブクラス インスタンスの サブクラス インスタンスの クラス親{ } クラスChildはParentを拡張します{ } var p = 新しい親(); var c = 新しい子(); c.__proto__ === p.__proto__ // 偽 c.__proto__ === Child.prototype // true c.__proto__.__proto__ === p.__proto__ // 真 3. まとめフロントエンド 以下もご興味があるかもしれません:
|
<<: docker を使用して Redis マスター/スレーブを構築する方法
誰もがこんな気持ちになったことがあると思います。30 秒の広告が入った動画を見ると、とても不快に感じ...
構文: ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY...
データは貴重なものであることは誰もが知っています。データをバックアップしなければ、データをそのまま放...
この記事では、シンプルなカレンダー効果を実現するためのJSの具体的なコードを参考までに紹介します。具...
中国初のカッター github.com/chokcocoまず、ここに画像があります。純粋な CSS ...
序文Docker と VS Code を使用すると、ローカル開発環境全体を最適化し、プロジェクトの進...
MySQL のデータ型は datetime です。データベースに保存されているデータは 2015-0...
この記事では、ブルーグリーン デプロイメントと、nginx を使用してブルーグリーン デプロイメント...
まず最初に、ロード バランシングとは何かについて説明します。ロード バランシングとは、リクエストの内...
目次序文sudo書き込み権限を追加するgit 2.9.0をインストールopenssl 1.1.1l ...
MySQL のCAST()およびCONVERT()関数を使用すると、ある型の値を取得し、別の型の値を...
この記事では、例を使用して、MySQL ビューの作成 (CREATE VIEW) と使用上の制限につ...
目次問題の説明原理分析問題分析拡大する総括する問題の説明ユーザーはプライマリ データベースに対して変...
この記事では、Element-uiを使用してvue.jsでナビゲーションメニューを実装するための具体...
1 yumでソフトウェアをインストールしたときにダウンロードしたrpmパッケージを保存しますyum ...