2016-04-06 50 views
-1

HTML görünümüne bağlı kurucu sınıfım olduğunu varsayalım.Oluşturucu ikilemi

function MerchantCtrl() { 
    this.detailView; 
    if (routeContainsId) { 
    this.detailView = true; 
    // load single merchant 
    } else { 
    this.detailView = false; 
    // load all merchants 
    } 
} 

görünümü tarafında şablon yükleri detailView alanın truthness bağlı şöyledir: kodudur. Ya ben yukarıdaki yaklaşım kullanmak ya da benzeri bir şey yapabilirim: üç değeri undefined veya boolean alabilir ilk yaklaşımda detailView yılında

function MerchantCtrl() { 
    this.detailView = false; 
    if (routeContainsId) { 
    this.detailView = true; 
    // load single merchant 
    } else { 
    this.detailView = false; 
    // load all merchants 
    } 
} 

ama ikinci yaklaşımda sadece boolean alabilir. OOP'taki durumla başa çıkmak için daha iyi bir yol ve önerilen yol hangisidir?

+0

'detailView'' değildir requestStatus == undefined eğer isteği beklemede olduğu veya henüz yapılmış değil varsayabiliriz undefined' boş değil mi? – IsraGab

+0

Nooooooo, soru etiketine performans ve v8 eklediniz mi? Bu çok basit problemle performanstan gerçekten korkuyor musun? –

+0

@ MatíasFidemraizer aslında sorunu daha basit hale getirdim :) Ben sadece v8 bakış açısından kurucudaki tüm özellikleri bildirmek için iyi bir uygulama olduğunu okudum. – CodeYogi

cevap

1

Bu, OOP ile ilgisi yoktur. else blok, kesinlikle this.detailView mülkiyet hem oluşturulacak garanti ve olası boole değerlerinden biriyle ayarlanmıştır -

function MerchantCtrl() { 
    if (routeContainsId) { 
    this.detailView = true; 
    // load single merchant 
    } else { 
    this.detailView = false; 
    // load all merchants 
    } 
} 

bir if kullandığınız beri:

Aslında üçüncü bir yaklaşımla gider . İlk önce bildirmeye gerek yok. Hiçbir koşul gerçekleştiğinde

if(routeContainsId) { 
    this.detailView = true; 
} else if(routeHasParameters) { // invented flag 
    this.detailView = false; 
} 

ne olur: else if blok - Bir if kodlama olsaydın

Önce özelliği yaratacak? this.detailViewundefined olurdu ve önce bunu ilan etmek gerekir:

// This will be property's default value 
this.detailView = false; 

if(routeContainsId) { 
    this.detailView = true; 
} else if(routeHasParameters) { // invented flag 
    this.detailView = false; 
} 
+0

Üç durum boolean ile ilgili olarak, fikri daha güçlü bir şekilde desteklemek için herhangi bir makale/link var mı ? – CodeYogi

+0

@CodeYogi Size kendi nedenlerimi vereceğim. 'Undefined' de JS de atanabilir.Örneğin, '{property: undefined} '. Çoğu kişi' if (obj.property) '(nerede bekliyorlar false 'özellik bildirilmediğinde) ve aslında bir özellik var mı diye kontrol etmek için daha iyi bir yerleşik yol vardır:' obj.hasOwnProperty ("property") 'özelliği, nesnenin kendi içinde ve prototip zincirinde değilse. –

+0

OOP var, çünkü 'Yapıcı' dan bahsetmiştim! – CodeYogi

0

Özellikle kod bakım, okunabilirlik vb açısından yardımcı olacağını türünü belirten .. ben durumlarda bir tercihin daha olduğuna inanıyoruz seninki kadar çünkü Sadece Boolean eşdeğer değerleriyle uğraşıyorsunuz (doğru ve yanlış) ve undefined yanlış bir değer olarak kullanılabilir.

Ancak, yalnızca bir değişkenin Boole durumunun değil, aynı zamanda başlatılmış veya başlatılmış durumları da vardır. Aşağıdaki örnek yalnızca örnek olarak kullanım içindir, üretimde bunu kullanamayabiliriz.

var requestStatus; 
//Some code that made a async request 
//Set true if request is successful 
//Set false if failed 

Şimdi, bazı işlevinde ben durumunu kontrol etmek istiyorsanız, sadece boolean önemli ama