[JS]010プロトタイプとクラス
27269 ワード
JavaScriptの文法を学ぶことはまだたくさんありますが、直接反応の基礎に入り、聞きながら学び、その時必要な部分を探して位置づけたいと思っています。
プロトタイプとクラス
オブジェクト作成者
プロトタイプとクラスを理解する前に、まずオブジェクト作成者を理解します。オブジェクト作成者は、関数を使用して新しいオブジェクトを作成し、挿入する値または関数を実装できます。
function Animal(type, name, sound) {
this.type = type;
this.name = name;
this.sound = sound;
this.say = function() {
console.log(this.sound);
};
}
const dog = new Animal('개', '멍멍이', '멍멍');
const cat = new Animal('고양이', '야옹이', '야옹');
dog.say();
cat.say();
結果は以下の通りです。
멍멍
야옹
オブジェクトジェネレータを使用する場合、通常は大文字で関数の名前を先頭に置き、新しいオブジェクトを作成する場合はnewキーを前に付ける必要があります。
上のコードを見てみましょう。dogが持つsay関数はcatが持つ実行コードと同じですが、オブジェクトを作成するたびに新しい関数thisが作成されます。sayに設定します。
同じオブジェクトを使用して関数を構築する場合は、特定の関数または値を繰り返し使用できます。
プロトタイプ
プロトタイプは、次のようにオブジェクト作成者関数の下にあります。prototype.「必要な鍵」=入力コードで設定できます。
function Animal(type, name, sound) {
this.type = type;
this.name = name;
this.sound = sound;
}
Animal.prototype.say = function() {
console.log(this.sound);
};
Animal.prototype.sharedValue = 1;
const dog = new Animal('개', '멍멍이', '멍멍');
const cat = new Animal('고양이', '야옹이', '야옹');
dog.say();
cat.say();
console.log(dog.sharedValue);
console.log(cat.sharedValue);
結果は以下の通りです。
멍멍
야옹
1
1
オブジェクト作成者の継承の取得
たとえば、catとdogという新しいオブジェクトジェネレータを作成するとします。次に,オブジェクト作成者がAnimalの機能を再利用すると仮定する.もしそうなら、このように実現することができます。
function Animal(type, name, sound) {
this.type = type;
this.name = name;
this.sound = sound;
}
Animal.prototype.say = function() {
console.log(this.sound);
};
Animal.prototype.sharedValue = 1;
function Dog(name, sound) {
Animal.call(this, '개', name, sound);
}
Dog.prototype = Animal.prototype;
function Cat(name, sound) {
Animal.call(this, '고양이', name, sound);
}
Cat.prototype = Animal.prototype;
const dog = new Dog('멍멍이', '멍멍');
const cat = new Cat('야옹이', '야옹');
dog.say();
cat.say();
新しく作成したDogとCat関数でAnimalを使用します。最初のパラメータにthisとAnimalオブジェクトジェネレータ関数に必要なパラメータが含まれているcall関数を呼び出します。
プロトタイプを共有する必要があるため、継承されたオブジェクトジェネレータ関数を作成した後、プロトタイプ値をAnimalに設定します。プロトタイプに設定します。
カテゴリ
クラスはC++,Java,C#,PHPなど他のプログラミング言語が持つ機能であるが,javascriptにはクラス構文がなく,従来のjavascriptにはクラス構文がなかったため,上記のコードのようにオブジェクトジェネレータ関数を用いて類似のタスクを実現する.
ES 6にはClassという構文が追加され、オブジェクトジェネレータで実装したコードをより明確かつ簡潔に実現できます。また、継承もずっと簡単です。
class Animal {
constructor(type, name, sound) {
this.type = type;
this.name = name;
this.sound = sound;
}
say() {
console.log(this.sound);
}
}
const dog = new Animal('개', '멍멍이', '멍멍');
const cat = new Animal('고양이', '야옹이', '야옹');
dog.say();
cat.say();
ここでは,クラス内部にsayという関数を宣言し,クラス内部の関数を「メソッド」と呼ぶ.このようにメソッドを作成すると、prototypeとして自動的に登録されます。
classを使用すると、他のクラスを簡単に継承できます。
class Animal {
constructor(type, name, sound) {
this.type = type;
this.name = name;
this.sound = sound;
}
say() {
console.log(this.sound);
}
}
class Dog extends Animal {
constructor(name, sound) {
super('개', name, sound);
}
}
class Cat extends Animal {
constructor(name, sound) {
super('고양이', name, sound);
}
}
const dog = new Dog('멍멍이', '멍멍');
const cat = new Cat('야옹이', '야옹');
dog.say();
cat.say();
継承時にextendsキーワードを使用し、コンストラクション関数で使用されるsuper()関数は継承クラスのジェネレータを指します。
class Animal {
constructor(type, name, sound) {
this.type = type;
this.name = name;
this.sound = sound;
}
say(){
console.log(this.sound);
}
}
class Dog extends Animal {
constructor(name, sound) {
super('개', name, sound);
}
}
class Cat extends Animal {
constructor(name, sound) {
super('고양이', name, sound);
}
}
const dog = new Dog('멍멍이', '멍멍');
const dog2 = new Dog('왈왈이', '왈왈');
const cat = new Cat('야옹이', '야옹');
const cat2 = new Cat('냐옹이', '냐옹');
dog.say();
dog2.say();
cat.say();
cat2.say();
Reference
この問題について([JS]010プロトタイプとクラス), 我々は、より多くの情報をここで見つけました
https://velog.io/@frontjsw/JS-010-프로토타입과-클래스
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
function Animal(type, name, sound) {
this.type = type;
this.name = name;
this.sound = sound;
this.say = function() {
console.log(this.sound);
};
}
const dog = new Animal('개', '멍멍이', '멍멍');
const cat = new Animal('고양이', '야옹이', '야옹');
dog.say();
cat.say();
멍멍
야옹
function Animal(type, name, sound) {
this.type = type;
this.name = name;
this.sound = sound;
}
Animal.prototype.say = function() {
console.log(this.sound);
};
Animal.prototype.sharedValue = 1;
const dog = new Animal('개', '멍멍이', '멍멍');
const cat = new Animal('고양이', '야옹이', '야옹');
dog.say();
cat.say();
console.log(dog.sharedValue);
console.log(cat.sharedValue);
멍멍
야옹
1
1
function Animal(type, name, sound) {
this.type = type;
this.name = name;
this.sound = sound;
}
Animal.prototype.say = function() {
console.log(this.sound);
};
Animal.prototype.sharedValue = 1;
function Dog(name, sound) {
Animal.call(this, '개', name, sound);
}
Dog.prototype = Animal.prototype;
function Cat(name, sound) {
Animal.call(this, '고양이', name, sound);
}
Cat.prototype = Animal.prototype;
const dog = new Dog('멍멍이', '멍멍');
const cat = new Cat('야옹이', '야옹');
dog.say();
cat.say();
class Animal {
constructor(type, name, sound) {
this.type = type;
this.name = name;
this.sound = sound;
}
say() {
console.log(this.sound);
}
}
const dog = new Animal('개', '멍멍이', '멍멍');
const cat = new Animal('고양이', '야옹이', '야옹');
dog.say();
cat.say();
class Animal {
constructor(type, name, sound) {
this.type = type;
this.name = name;
this.sound = sound;
}
say() {
console.log(this.sound);
}
}
class Dog extends Animal {
constructor(name, sound) {
super('개', name, sound);
}
}
class Cat extends Animal {
constructor(name, sound) {
super('고양이', name, sound);
}
}
const dog = new Dog('멍멍이', '멍멍');
const cat = new Cat('야옹이', '야옹');
dog.say();
cat.say();
class Animal {
constructor(type, name, sound) {
this.type = type;
this.name = name;
this.sound = sound;
}
say(){
console.log(this.sound);
}
}
class Dog extends Animal {
constructor(name, sound) {
super('개', name, sound);
}
}
class Cat extends Animal {
constructor(name, sound) {
super('고양이', name, sound);
}
}
const dog = new Dog('멍멍이', '멍멍');
const dog2 = new Dog('왈왈이', '왈왈');
const cat = new Cat('야옹이', '야옹');
const cat2 = new Cat('냐옹이', '냐옹');
dog.say();
dog2.say();
cat.say();
cat2.say();
Reference
この問題について([JS]010プロトタイプとクラス), 我々は、より多くの情報をここで見つけました https://velog.io/@frontjsw/JS-010-프로토타입과-클래스テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol