モダンjavascript入門]18
22784 ワード
18ジェネレータとクラス構文
18.1ジェネレータ
18.1.1ジェネレータの定義方法
(転送済み)
function Card(suit, rank) {
this.suit = suit;
this.rank = rank;
}
Card.prototype.show = function() {
console.log(this.suit + this.rank)
}
var Card = function(suit, rank) {
this.suit = suit;
this.rank = rank;
}
class Card {
constructor(suit, rank) {
this.suit = suit;
this.rank = rank;
}
show() {
console.log(this.suit + this.rank)
}
}
var Card = class {
constructor(suit, rank) {
this.suit = suit;
this.rank = rank;
}
show() {
console.log(this.suit + this.rank)
}
}
18.1.2作成者を使用してアクセス者プロファイルを定義する
ユーザーに特定の方法でPropertyを読み書きさせることができます.(getter, setter)
function Person(name) {
Object.defineProtperty(this, 'name', {
get : function() {
return name;
},
set : function(newName) {
name = newName;
},
configurable : true,
enumerable : true,
})
}
Person.prototype.sayName = function() {
console.log(this.name);
}
var person = new Person('Tom');
console.log(p.name); // Tom
p.name = 'Huck';
console.log(p.name); // Huck
p.sayName(); // Huck
18.2継承ジェネレータ
18.2.1継承ジェネレータ
JavaScriptでは、作成者がクラスの役割を果たします.
オブジェクトのプロトタイプ継承メカニズムの使用
作成者もオブジェクトであるため、オブジェクトのプロトタイプ継承を利用して作成者継承を実現することができます.
継承された作成者:スーパータイプ作成者
継承された作成者:サブタイプ作成者
18.2.2スーパータイプジェネレータの例
例1
Ellipse作成者として作成されたインスタンス楕円は、
Ellipse.プロトタイプとオブジェクト.プロトタイプから継承して使用可能
18.2.3ジェネレータのプロトタイプを継承する
function Circle(r) {
this.a = r;
this.b = r;
}
var circle = new Circle(2);
circleのプロトタイプ:Circle.prototypeCircle.プロトタイプのプロトタイプ:Object.prototype
circleでEllipse.Prototypeを使用するには、Circleを使用します.原型はElipse.プロトタイプを継承する必要があります.
->Cycleの原型Ellipse.プロトタイプを挿入する必要があります
例2
例2-その他の方法
でもこの方法はCircleです.欠点はプロトタイプで生成されたEllipseのPropertyを浪費することである.
18.2.4借用構造関数
Ellipse作成者定義のプロパティ(th.a,th.b)をcallメソッドを使用してCircle作成者にインポート
例
18.2.5スーパータイプを使用する方法
Ellipse.prototype.再定義ではなくtoStringを上書き
Ellipse.prototypeメソッド定義の使用
例
18.3 ECMAScript 6のクラス構文
18.3.1クラス文法の基礎
クラス構文のタイプ
// 생성자
function Circle(center, radius) {
this.center = center;
this.radius = radius;
}
Circle.prototype.area = function() {
return Math.PI * this.radius * this.radius;
}
// 클래스 구문
class Circle2 {
constructor(center, radius) {
this.center = center;
this.radius = radius;
}
// prototype 메서드
area() {
return Math.PI * this.radius * this.radius;
}
}
クラス宣言の作成:class 이름
クラスメンバーは関数宣言でfunction
クラス宣言文と関数宣言文の違い
クラス式
var Circle = class {
//생성자를 이용한 초기화
constructor(center, radius) {
this.center = center;
this.radius = radius;
}
area() {
return Math.PI * this.radius * this.radius;
}
}
classの後にすべての識別子を名前として使用できますvar Circle = class Kreis { ... }
// Kreis라는 이름은 클래스바디 내에서만 유효
var k = new Kreis() // 에러발생
var c = new Circle() // 정상적으로 인스턴스 생성됨
18.3.2アクセス者の作成
getterとsetterの作成
class Person {
constructor(name) {
this.name = name;
}
get name() {
return this._name;
}
set name(value) {
this._name = value;
}
sayName() {
console.log(this.name);
}
}
getキーとsetキーを使用してアクセス者を定義するvar person = new Person('Tom');
console.log(person.name); // 'Tom'
person.name = 'Huck';
console.log(person.name); // 'Huck'
person.sayName(); // Huck
この値をnameに
18.3.3静的メソッドの作成
静的メソッドを使用して静的メソッドを作成できます
例
クラスを18.3.4に拡張して継承
クラス宣言または式でextendsキーを使用して他のジェネレータを継承
例
Ball作成者のインスタンスは、CircleのareaとtoStringのほかに、他の定義のmoveも使用できます.
18.3.5スーパータイプメソッドの呼び出し
スーパーキーを使用すると、サブタイプの作成者はスーパータイプの作成者のメソッドを呼び出すことができます.
スーパータイプメソッドの使用
**クラス構文定義関数(クラスを定義しない)
Reference
この問題について(モダンjavascript入門]18), 我々は、より多くの情報をここで見つけました https://velog.io/@deveq/모던자바스크립트입문-18テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol