説明
- 今日KOAのソースを読んだときに、出会いは
Object.create
、この考え方に少しさびを感じ、その後、MDNの再ソートを開設します - ポータル
Object.create()
- 栗の公式ウェブサイトに直接適用されます
const person = {
isHuman: false,
printIntroduction: function () {
console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`);
}
}
const me = Object.create(person);
console.log(me);
- 私は上記の説明しました
创建一个新对象,使用现有的对象来提供新创建的对象的__proto__
- それは2つのことをしました:
- 新しいオブジェクトを作成します。
- 新しいオブジェクトのプロパティ__proto__上の元のオブジェクトのプロパティとメソッド
ベネフィット
- 個人的に私は、オブジェクトの割り当ての浅いコピーの問題を解決することを考えます
- JavaScriptのオブジェクト・タイプが参照タイプ(「JavaScriptの高度なプログラミング」(第3版))であるため、通常の割り当て方法と、次の通り:
const me = person;
me.isHuman = true;
console.log(person.isHuman);
私たちは、私に動作し、見て、人に直接影響することができます。
クラススタイルの継承を達成するためにObject.create使用
- 実際にどのような物事に行わ最初のFind javascriptの、クラスの継承
- カテゴリ以下そこ形状を仮定します。
class Shape {
constructor(x, y) {
this.x = 0;
this.y = 0;
}
moved(x, y){
this.x += x;
this.y += y;
console.log('Shape moved');
}
}
- Rectangleクラス継承形状を取ります
class Rectangle extends Shape{
constructor(x, y){
super();
}
}
const rect = new Rectangle();
const shape = new Shape();
console.log('rect', rect);
console.log('shape', shape);
- 最後の継承で物事を見て、それらをプリントアウト
- あなたは見ることができます:
- 長方形のコンストラクタ関数ではShapeと呼ばれています
- 長方形プロトタイププロトタイププロトタイプ継承の形
- Shapeクラスを実装するには
function Shape (x, y) {
this.x = 0;
this.y = 0;
}
Shape.prototype.moved = function (x, y){
this.x += x;
ths.y += y;
console.log('Shape moved');
}
const shape = new Shape();
console.log('shape', shape);
- 形状および範囲は、Rectangleクラスで現在のスコープを呼び出すためにバインドされている、あなたが達成することができます
this.x =0; this.y = y
function Rectangle (x, y) {
Shape.apply(this);
}
const rect = new Rectangle();
console.log('rect');
解決されていない2つの点があります:
長方形コンストラクタのプロトタイプチェーンに沿っていない3.形状は
4移動方法は継承されていません
私はObject.createメソッドが新しいオブジェクトを作成することであると思うし、ぶら下がっているオブジェクトのプロパティとメソッド__proto__
は次のよう財産、相続方式には、次のとおりです。
Rectangle.prototype = Object.create(Shape.prototype);
const rect = new Rectangle();
console.log('rect', rect);
私たちは、基本的には成功を継承し、見ることができますが、長方形のコンストラクタ(コンストラクタ)が失われた。に持参するだけで済みますが
Rectangle.prototpe.constructor = Rectangle;
概要
- あなたは、オブジェクトが元のオブジェクトには影響しませんすべてのプロパティとメソッドのために別のオブジェクト、および新しいオブジェクトの動作を継承したい場合。Object.createは、割り当てた値に使用することができます。
- オブジェクトは、プロトタイプチェーン(プロトタイプ、ブラウザが表示されている従う方法で見つけることができない場合に
__proto__
ステップバイステップを探しています)。