• 20-03-2019, 14:12:13
    #1
    Arkadaşlar merhaba.

    new constructor(); ve prototype içinde uygun olup olmaması ile alakalı bir sorum olacaktı.


    ne istediğimi anlatayım:


    var fonksiyon = function(data1, data2) {
         var d1 = data1, d2 = data2;
         this.carp = function() {
              return d1 * d2;
         }
         this.topla= function() {
              return d1 + d2;
         }
    }
    yukarıdaki fonksiyonu tamamen uydurdum. Şimdi bu fonksiyon içinde bir hesaplama yapabilmel için fonksiyonu aşağıdaki gibi çağırmak gerekiyor.


    new fonksiyon(5,3).carp();
    // Log = 15
    Prototype lerini kullandığım için (this), "new" yazmadan çağırdığımızda,

    fonksiyon(5,3).carp();
    // Log = carp is not defined // veya not function diyecektir
    İşte olay bu noktada başlıyor. Ben dışarıda her defasında "new" i kullanmak istemiyorum. Onun için onu fonksiyonun içine alsam, diğerleri için bir alt fonksiyon oluştursam?

    var fonksiyon = function(data1, data2) {
         var d1 = data1, d2 = data2;
         this.carp = function() {
              new CARP(d1,d2);
         }
         var CARP = function(d1,d2) {
             return d1 * d2;
         };
         this.topla= function() {
             new TOPLA(d1,d2);
         }
         var TOPLA = function(d1,d2) {
             return d1 + d2;
         };
    }
    Bu şekilde yapsam?

    fonksiyon(5,3).carp();
    // Log = 15
    New kullanmadan da bana istediğim sonucu veriyor. Çünkü içeriye taşıdım.

    Fakat bu yazım anatomisinin bir sorunu var mı bilemedim. Ne bileyim IE de çalışır mı? veya ne bileyim hız ı olumsuz etkiler mi? Yani kullanımı sakıncalı mı?

    "çünkü plugin yazacağım, onun içinde kullanacağım. factory() vs."


    Aksi taktirde düzgün calışıyor.

    Yorumlarınzı ve varsa alternatif çözümlerinizi bekliyorum.
  • 20-03-2019, 14:22:14
    #2
    Üyeliği durduruldu
    Valla ben de şöyle yazıyorum genelde;

    let Operations = {
          Sum : function(data1, data2) {
              return data1+data2;
          },
          Multiply : function(data1, data2) {
             return data1*data2;
          }
    }
    
    console.log(Operations.Sum(1,2));
    console.log(Operations.Multiply(1,2));
    Yazdığında bir sıkıntı yok.
    Class tarzında gitmek istersen buraya bak : https://stackoverflow.com/questions/...what-are-their
  • 20-03-2019, 14:32:27
    #3
    var fonksiyon = function(data1, data2) {
         var d1 = data1, d2 = data2;
         this.carp = function() {
              return d1 * d2;
         }
         this.topla= function() {
              return d1 + d2;
         }
         //bu alana dikkat! chain(zincir) fonksiyon kullanıyorsunuz, devamuna bu fonksiyonu dönmelisiniz.
         return this;
    }
    
    alert(fonksiyon(2,5).carp());
  • 20-03-2019, 15:03:52
    #4
    ystr adlı üyeden alıntı: mesajı görüntüle
    Valla ben de şöyle yazıyorum genelde;

    let Operations = {
          Sum : function(data1, data2) {
              return data1+data2;
          },
          Multiply : function(data1, data2) {
             return data1*data2;
          }
    }
    
    console.log(Operations.Sum(1,2));
    console.log(Operations.Multiply(1,2));
    Yazdığında bir sıkıntı yok.
    Class tarzında gitmek istersen buraya bak : https://stackoverflow.com/questions/...what-are-their
    Teşekkürler hocam, bunu zaten kullanıyorum. Bu Prototip değil de Property oluyor. Bu zaten cepte. Ama "Sum" içinde dışarıdan erişim gerektirecek yeni bir fonksiyona ihtiyacınız olduğunu düşünün.

    let Operations = {
          Sum : {
                  Sun: function(data1, data2) {
                            return data1+data2;
                  },
          }
    
    }
    Bunun gibi düşünün ama, burada Sum fonksiyon değil, onunda bir fonksiyon() olması lazım. Tabi doğal olarak o zaman böyle değilde .prototype. şeklinde yazmak gerekiyor.



    crooper adlı üyeden alıntı: mesajı görüntüle
    var fonksiyon = function(data1, data2) {
         var d1 = data1, d2 = data2;
         this.carp = function() {
              return d1 * d2;
         }
         this.topla= function() {
              return d1 + d2;
         }
         //bu alana dikkat! chain(zincir) fonksiyon kullanıyorsunuz, devamuna bu fonksiyonu dönmelisiniz.
         return this;
    }
    
    alert(fonksiyon(2,5).carp());
    aynen tabi hocam. onu örneği yazarken unutmuşum. uydurdum dedim ya. Yoksa dışarı veri veremez ki. Sadece çalışır.
  • 20-03-2019, 16:31:49
    #5
    Üyeliği durduruldu
    Prototype adlı üyeden alıntı: mesajı görüntüle
    Teşekkürler hocam, bunu zaten kullanıyorum. Bu Prototip değil de Property oluyor. Bu zaten cepte. Ama "Sum" içinde dışarıdan erişim gerektirecek yeni bir fonksiyona ihtiyacınız olduğunu düşünün.

    let Operations = {
          Sum : {
                  Sun: function(data1, data2) {
                            return data1+data2;
                  },
          }
    
    }
    Bunun gibi düşünün ama, burada Sum fonksiyon değil, onunda bir fonksiyon() olması lazım. Tabi doğal olarak o zaman böyle değilde .prototype. şeklinde yazmak gerekiyor.





    aynen tabi hocam. onu örneği yazarken unutmuşum. uydurdum dedim ya. Yoksa dışarı veri veremez ki. Sadece çalışır.
    Hocam pek anlayamadım isteğinizi ama bakın burda new'i anlatmış : https://stackoverflow.com/questions/...-in-javascript
    Buradaki yanıtlar içinde en anlaşılır olanı da şu :

    function Foo() {
        return this;
    }
    
    var a = Foo();       //returns window object
    var b = new Foo();   //returns empty object of foo
    
    a instanceof Window;  // true
    a instanceof Foo;     // false
    
    b instanceof Window;  // false
    b instanceof Foo;     // true
  • 21-03-2019, 12:37:54
    #6
    şu tarzda modül yapısını da kullanabilirsin
    const calculator = (() => {
      const add = (a, b) => a + b;
      const sub = (a, b) => a - b;
      const mul = (a, b) => a * b;
      const div = (a, b) => a / b;
      return {
        add,
        sub,
        mul,
        div,
      };
    })();
    
    calculator.add(3,5) // 8
    calculator.sub(6,2) // 4
    calculator.mul(14,5534) // 77476