Эй, ребята, я новичок в яваскрипт и я был советую прочитать книгу learning javascript design patterns, я читал шаблон фабрики дизайна и наткнулся на следующую трудности, просто посмотри на ниже сценарии:Возвращает переменную как функцию-конструктор.
// Types.js - Constructors used behind the scenes
// A constructor for defining new cars
function Car(options) {
// some defaults
this.doors = options.doors || 4;
this.state = options.state || "brand new";
this.color = options.color || "silver";
}
// A constructor for defining new trucks
function Truck(options){
this.state = options.state || "used";
this.wheelSize = options.wheelSize || "large";
this.color = options.color || "blue";
}
// FactoryExample.js
// Define a skeleton vehicle factory
function VehicleFactory() {}
// Define the prototypes and utilities for this factory
// Our default vehicleClass is Car
VehicleFactory.prototype.vehicleClass = Car;
// Our Factory method for creating new Vehicle instances
VehicleFactory.prototype.createVehicle = function (options) {
switch(options.vehicleType){
case "car":
this.vehicleClass = Car;
break;
case "truck":
this.vehicleClass = Truck;
break;
//defaults to VehicleFactory.prototype.vehicleClass (Car)
}
return new this.vehicleClass(options);
};
// Create an instance of our factory that makes cars
var carFactory = new VehicleFactory();
var car = carFactory.createVehicle({
vehicleType: "car",
color: "yellow",
doors: 6 });
// Test to confirm our car was created using the vehicleClass/prototype Car
// Outputs: true
console.log(car instanceof Car);
// Outputs: Car object of color "yellow", doors: 6 in a "brand new" state
console.log(car);
Этих является примером я нашел для завода шаблона проектирования, теперь моя проблема понимания следующей строки:
считая, что класс vehicleClass определяются как переменные:
VehicleFactory.prototype.vehicleClass = Car;
ид on't понять, что возвращается в функции конструктора:
return new this.vehicleClass(options);
хорошо тот мой только трудности и снова и снова работает над кодом, все еще does't имеет смысл для меня.
Буду признателен, если бы кто-нибудь мог это объяснить.
спасибо.
Alexander.
Функция передается как переменная (функции являются первоклассными гражданами в JS), а затем вызывается позже. –