function Single(){ if(Single.caller !== Single.getInstance){ throw new Error("new ile çalıştırılamaz"); } this.dt = new Date(); } Single.getInstance = function() { // Single sınıfına ait instance static özelliği yaratılmadan önce console.dir(this); debugger; if(this.instance === undefined){ // this tanımı doğrudan sınıfı yani Single fonksiyonunu işaret edecektir this.instance = new Single(); // Single sınıfının instance static özelliği yaratıldı // Ve bundan sonra bir daha yaratılmayıp sınıfa bağlı instance nesnesi gönderilecek console.dir(this); } return this.instance } // Single sınıfının static fonksiyonu olan getInstance üstünden tekil nesne çağırılır a = Single.getInstance(); // new Anahtarıyla Single sınıfından bir nesne tanımlanamaz a = new Single();
Peki node.js içinde nasıl olurdu? Unutmamalı ki require ile çağırdığımız tüm js dosyaları memorye bir kez yüklenir ve her require ile çağrıldığında artık file i/o yapmak yerine bellekten getirilir. Ve biz objemizi bir kez module.exports içine koydukmu bir daha yaratmak durumunda olmayız. Yukarıdaki kodu single.js olarak sakladığımızı düşünelim.
single.js
module.exports = Single.getInstance()çağırdığımız dosya.js olsun:
module.exports = require('./single.js')