2012-05-22 7 views
7

JavaScript'te, bir nesnenin değişken adına başvuruda bulunulurken, nesnenin yeni anahtar: değer çiftleri bildirilirken this kullanılarak fark var mıdır? AyrıcaJavaScript'te, bir nesnenin değişken ismine atıfta bulunma ile yeni anahtar bildirirken `this 'kullanıldığında nesne arasında değer farkı var mıdır?

var foo = { 
     bar: function() { 
     foo.qux = 'value'; 
     } 
    }; 

    alert(foo.qux); // undefined 
    foo.bar(); 
    alert(foo.qux); // 'value' 

    var foo = { 
     bar: function() { 
     this.qux = 'value'; 
     } 
    }; 

    alert(foo.qux); // undefined 
    foo.bar(); 
    alert(foo.qux); // value 

:

cevap

10

http://jsbin.com/emayub/9/edit Sadece sunulan kod göz önünde bulundurarak her ikisi de aynı yapacağız. Ama akılda tutulması gereken bazı şeyler vardır:

foo o değişken adıdır nesneninadı değil.

Ve değişkenler değişebilir. Şunu bir düşünün: beklendiği gibi

var bar = foo; 
foo = null; 

this kullanırken kod kodunu bozabilecek foo kullanarak, ancak, bar.bar() çalışmaya devam eder.

foo'u kullanarak, işlevi değişkenin adına bağlı hale getiriyorsunuz, bu nedenle değişken her değiştiğinde işlev kırılıyor. Bu aynı zamanda kod yenileme işlemiyle ilgili önemli bir husustur.

+0

Çok basitleştirilmiş bir örnek olduğu için ilk cümleyi takdir edin. Nesne değişkeni adının kullanılma biçiminin yararlı olabileceğini düşündüğümde, özellikle değişken adının değişmeyeceği bir global nesne ile çalışırken, uygulamanızın bir organizasyonel ve kod okunabilirlik perspektifinden kaynaklandığı ve uygulamanızın çok sayıda olay tahrikli olduğunu mantık. Kesinlikle en kötü uygulamaları savunabilirim - ama sadece bir düşüncesi. – Anthony

İlgili konular