2015-07-08 14 views
5

JavaScript'in tüm çılgın esneklik değerleri vardır. Bundan yararlanmaya karar verdim ve ilk görüşmede kendini bir işleve değiştirdim. Bu yapmak için kötü bir şey mi?Bir işlevden çağrılması gereken değişken referansı değiştirmek yanlış mıydı?

(function(){ 
    var nextAfter = function(){}; 
    Something.prototype.next = function(){ 
     //do pre-start actions. 
     this.next = nextAfter; 
    }; 
})(); 

Bu fonksiyon, bir ana döngünün içine denir, bu yüzden birçok kez çağrılan, ancak örnek kere kullanacağımız için her zaman "sözde" dir: Bu gibi çalışır.

+1

"Potansiyel güvenlik tehdidi"? – undefined

+1

Bu işlev kendini değiştirmiyor. 'Bir şey' prototipinin hala bir 'next() işlevi vardır, ancak çağrıldığında, bir 'next()' öğesini doğrudan' Something''in bir örneği olan nesnede tanımlar. – nnnnnn

+0

@nnnnnn Bunu asla yakalayamazdım! Bunun hakkında bir şey söylediğine sevindim. Bu noktada sanırım istediğim farklıdır, örneğin: Bir işleve sahip olmak, çağrıldığı değişkenin referansını değiştirir. – Andrew

cevap

6

Yapılması gayet mantıklı bir şey. Örneğin, bir durum makinesindeki durum değişikliklerini uygulamak için kullanışlı bir yol olabilir, ancak başka birçok kullanım bulabileceğinden emin olabilirsiniz. Üste |

Aynı işlevselliklerin nasıl kapatılacağını da öğrenmek isteyebilirsiniz - kullanım durumuna bağlı olarak daha temiz olabilir.

Edit; prototip

Something = (function(){ 
    var next = function() { next = nextAfter; console.log("A"); } 
    var nextAfter = function() { console.log("B"); } 

    return { 
     next: function(){ next(); } 
    } 
})(); 

kapatma yararı değişmez bir kapağın örneği bu nesne türü için küresel prototip işlevini değiştirmek kalmamasıdır ve artık birden fazla bağımsız nesne nerede her olabilir kapatma nesnesi kendi durumunu koruyabilir.

+0

"Kapaklarla aynı işlevsellik" dedin, tam olarak ne demek istediğini anlamadım. Örneğim bir kapanış kullanıyor, ama ben de atıfta bulunma şeklini düşünmüyorum? – Andrew

+0

Bir kapanış örneği ekledim – Soren

İlgili konular