オブジェクトを理解するのprototype
は少し難しいです。ただし、OOP JavaScriptに関するこの記事は、いくつかの光を当てるのに役立ちます。
簡単に言うと、prototype
オブジェクトは「受信者」オブジェクトの青写真を提供します。必要なのは、受信者のprototype
プロパティを青写真オブジェクトに向けるだけです。プロトタイプブループリントオブジェクトの受信者は好きなだけ持つことができることに注意してください(したがって、CarとTrainは両方とも共通のVehicleプロトタイプオブジェクトを指すことができます)。
プロトタイプオブジェクトでプロパティと関数の両方を自由に定義できます。これにより、すべての受信者オブジェクトが使用できるようになります。例:
var vehiclePrototype = {
// A property which will be supplied to the recipient
cost: 0,
// A method which will be supplied the recipient
move: function () {
// Your prototype can refer to 'this' still.
console.log("Moving " + this.name);
};
}
これで、 :Car
を使用するを作成できます。vechiclePrototype
// Factory method for creating new car instances.
function createCar(name) {
// Define the Car's constructor function
function Car(name) {
this.name = name;
}
// Point the car's prototype at the vechiclePrototype object
Car.prototype = vechiclePrototype;
// Return a new Car instance
return new Car(name);
}
// Create a car instance and make use of the Prototype's methods and properties
var mustang = createCar(mustang);
mustang.cost = 5000;
mustang.move();
同様の方法で、新しいTrainオブジェクトを作成できます。
function createTrain(whilstleSound) {
// Define the Train's constructor function
function Train(name) {
this.whilstleSound = whilstleSound;
}
// Point the train's prototype at the vechiclePrototype object
Train.prototype = vechiclePrototype;
// Return a new Train instance
return new Train(name);
}
var ic125 = new Train("pooop pooop");
ic125.move();
プロトタイプ継承を使用して両方のすべてのインスタンスを使用し、(同じ関数の複数のインスタンスを作成する代わりに)まったく同じ関数Car
をTrain
共有することの大きな利点の1つは、これらのオブジェクトのインスタンスが多数ある場合に大幅なメモリ節約になります。move