Bu
var test2 = function() {
this.funk1 = function() {
console.log(1);
}
};
fark
var t = test1() //function call, t is result of test1 function execution
var t = new test1() //instance initialization, t is instance of test1 class
düşünün modül/kütüphane/eklentisi desen
var test1 = function() {
var funk1 = function() {
console.log(1);
}
return {
funk1: funk1
}
};
Bu OOP olan (Nesneye yönelik Programlama) paterni olup, basit model
Araba üreten bir üreticimiz var, üreticinin bazı yöntemleri vardır ve bir aracın kendi yöntemleri vardır, biz üreticinin kamuya ait özelliklerini değiştirmeyiz, ancak üreticinin bir araba oluşturmak için kullandığı teknolojiye erişemiyoruz. , bu yüzden araba siyah kutudur, bu da bazı halka açık gösteriler ortaya çıkarır ve düzeltilemez.
//service for creating/controlling manufactorer
var ManufacturerService = function(companyName) {
var self = this;
self.companyName = companyName;
//encapsulation
var Car = function(name, number){
var createdAt = new Date();
var engineStarts = 0;
//instance property, doesn't have setter
Object.defineProperty(this, 'info', {
get: function(){
return {
name: name,
createdAt: createdAt,
engineStarts: engineStarts
}
}
});
//instance method
this.startEngine = function(){
//private property, available only on instance, and cannot be extracted
engineStarts++;
//reference to ManufacturerService.companyName
console.log(self.companyName + ' ' + name + ':' + number + ' engine Started');
}
}
var createCar = function(name){
//check cache/duplication/validation
//or use custom behavior
var carNumber = ManufacturerService.genShortUid();
return new Car(name, carNumber);
}
var getName = function(){
return self.companyName;
}
return {
getName: getName,
createCar: createCar
}
};
//static method, this can be overriden by 3rdParty or user
ManufacturerService.genShortUid = function genShortUid() {
return ('0000' + (Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4);
}
Kullanımı, ManufacturerService
modeli tamamen dış dünyadan gizlendiği anlamına gelir ki, tamamen kapsüllü olduğu eklenti/kitaplık olarak yazılır, ama bu araba modeli fark edilir
//create a service instance
var VolvoCompany = new ManufacturerService('Volvo');
//access encapsulated Car model by createCar method
//which is available only on instance of service
var Golf = VolvoCompany.createCar('Golf');
//instance method of car Model
Golf.startEngine(); //logs Volvo Golf:vnv6 engine Started
Golf.info
//returns
Object {name: "Golf", createdAt: Sat Feb 13 2016 17:39:57 GMT+0600 (ALMT), engineStarts: 1}
//try to hack car instance
Golf.info.name = 'test';
Golf.name = 'test';
Golf.info
//returns same object, as Car model doesn't have exported setters
Object {name: "Golf", createdAt: Sat Feb 13 2016 17:39:57 GMT+0600 (ALMT), engineStarts: 1}
//customize guid generator of ManufacturerService
ManufacturerService.genShortUid = function(){
return '1111';
}
//reuse same service for another Car model
var Mazda = VolvoCompany.createCar('Mazda');
//instance method of car Model
Mazda.startEngine(); //logs Volvo Mazda:1111 engine Started
Özeti
ManufacturerService
ihracatı Sınırlı miktarda yöntem ve tamamen açık, ancak Car
örneği tamamen kapsüllenmiş ve görünür durumda değil
düzenlemeler/öneriler/yorumlar
modellerine hoşgeldiniz derslerine göz at. Neden iyi ve kötü olduklarına dair açıklamalarla birlikte bol miktarda eğitim. – epascarello