[Javascript] Prototype
3314 ワード
プロトタイプとは?
既存のパフォーマンスを活用して拡張する必要がある場合があります.あるいは、同じプログラムを複数のオブジェクトに分けて使用する場合があります.こういうときに使うのが原型です.例えば、
user
という名前のオブジェクトにlee
というpropertyを追加する必要がある場合、__proto__
を使用して追加することができる.これを「継承」と形容する.プロトタイプは、プロトタイプを読むときにのみ使用されます.__proto__
let walker = {
legs:4
};
let animal = {
eats: true
};
let rabbit = {
jumps: true
};
animal.__proto__ = walker;
rabbit.__proto__ = animal;
console.log(rabbit.eats);
最後の行では、ウサギにrabbit.__proto__ = animal;
を加えるとanimalのpropertyであり、rabbit은 animal을 상속받는다
と表現される.では、コンソールの出力はtrue
である.動物をブラウザコンソールに出力すると、eatsをpropertyとして足を継承することが決定されます.
このように継承できます.
for,,in
を使用してオブジェクト内でpropertyを確認すると、継承されたpropertyを確認できます.しかし、
key
とvalue
が出力されると、継承された番組の価格が得られない.このように,プロトタイプはプロトタイプを読み取ることができるが,値と鍵を読み取ることはできない.__proto__
は現業界ではあまり使われていない方法で、必要に応じてのみ使用することが望ましい.prototype
Case1
const car = function(color){
this.color = color;
};
car.prototype.wheels = 4;
car.prototype.drive = function(){
console.log("driving~");
}
let bus = new car('red');
let taxi = new car('blue');
car.prototype.wheel
はホイールをcar関数に継承し、car.prototype.drive
はdrive関数を継承することができる.newを使用してジェネレータ(オブジェクトシェイプ)に変換して格納できます.const car = function(color){
this.color = color;
this.wheel = 4;
this.drive = function(){
console.log("driving~");
}
};
このコードと同じ内容ですが、car関数で属性を再利用して値を取得する場合はprototypeを使用します.また、プロトコル・タイプを使用すると、再利用性が向上し、メモリ効率が向上します.
Case2
function Person(name, first, second,third){
this.name = name;
this.first = first;
this.second = second;
this.sum = function(){
return 'prototype : '+(this.first+this.second);
}
let kim = new Person('kim', 10, 20);
let lee = new Person('lee', 10, 20);
console.log(kim.sum());
console.log(lee.sum());
上記のように、Person
関数でもう1つの関数を宣言し、メソッドを作成し、コンストラクション関数を生成し、必要な値を出力することができます.ただし、kim
が実行されると、lee
が実行されるたびにsum()
が呼び出される.数が少なければ問題ないと思いますが、呼び出す関数が多ければ、プログラムに相応の遅延が生じるので、あまりよくありません.しかし、下図に示すように、
sum
関数をprototype
に継承すると、person
メソッドが実行されるたびに呼び出されるのではなく、呼び出された後にsum()
関数が共有される.複雑なコードやコンストラクション関数を複数回繰り返すと、プログラムのパフォーマンスが向上し、メモリ効率が向上します.function Person(name, first, second,third){
this.name = name;
this.first = first;
this.second = second;
}
Person.prototype.sum = function(){
return 'prototype : '+(this.first+this.second);
}
let kim = new Person('kim', 10, 20);
let lee = new Person('lee', 10, 20);
console.log("kim.sum()",kim.sum());
console.log("lee.sum()",lee.sum());
Reference
この問題について([Javascript] Prototype), 我々は、より多くの情報をここで見つけました https://velog.io/@ldaehi0205/Javascript-Prototypeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol