2013-07-18 16 views
8

Używam wzorca modułu w javascript. Czy jest to sposób tworzenia wystąpień "klasy"? Używam go we właściwy sposób?Przekazywanie parametru do modułu javascript

var moduleClass = (function() { 
var a =5; 
return { 
getA: function() { 
    console.log(a); 
} 
}; 
})(); 
var instance = moduleClass; 
instance.getA(); 

http://jsfiddle.net/PzLKy/ Jak mogę przekazać parametry dotyczące nowych instancji?

+0

użyć funkcji konstruktora zamiast literału, jeśli chcesz przekazać parametry w czasie tworzenia instancji. – dandavis

+0

W twoim kodzie nie ma klasowej konstrukcji. Po prostu masz wygenerowany singleton ze wzorem modułu. Czego * chcesz * - tylko wtedy możemy powiedzieć, że kod jest poprawny? – Bergi

+0

Chcę móc deklarować nowe wystąpienia i przekazywać różne wartości. Nie chcę robić czegoś konkretnego, tylko się uczę. – Petran

Odpowiedz

-1

Do tworzenia wystąpień należy użyć słowa kluczowego new z dowolną funkcją. Ta funkcja aka Konstruktor może pomóc stworzyć wiele instancji

var moduleClass = (function() { 
var a =5; 
return { 
getA: function() { 
    console.log(a); 
} 
}; 
})(); 
var instance = new moduleClass; 
instance.getA(); 

Konstruktor: Konstruktor funkcje są używane do nowego słowa kluczowego, a oni są jednym ze sposobów, możesz podać obiektowi prototypu.

PATRZ ->

  1. Javascript Prototypes,objects,constructor??i am confused
  2. Constructors in JavaScript objects
+0

Sam powiedziałeś, że 'new' musi być użyty z ** funkcją ** ... – Bergi

+0

czy wypróbowałeś swój kod przed opublikowaniem? – dandavis

+0

ohh, właśnie totalnie tęskniłem za skrzypcami ... przechodząc przez to teraz !!! –

7

Tak naprawdę nie potrzeba tu nowy, Poniżej jest właściwym sposobem na kod, aby osiągnąć to, co staramy się osiągnąć. Również be really careful while using new, if used unwisely it can start clobbering your Global variable, Jeśli chcesz korzystać z nowych, John Resig ma naprawdę piękny wyjaśnieniu dla jak zrobić to we właściwy sposób, na więcej przeczytać ten artykuł Johna Resig http://ejohn.org/blog/simple-class-instantiation/

http://jsfiddle.net/PzLKy/2/

var moduleClass = (function() { 
    var a =5; 

    return { 
     setA: function (inA) { 
     a=inA; 
    } , 
    getA: function() { 
     alert(a); 
    } 

    }; 

})(); 


var instance = moduleClass; 
instance.setA(8); 
instance.getA(); 

edit: contactmatt ma rację, na pewno nie bój użycia konstruktora, ale tutaj jest coś, trzeba zdawać sobie sprawę z

zaczerpnięta z art Johna Resig wspomnianego w akapicie pierwszym,

przypuszczam to jest kod

function User(first, last){ 
    this.name = first + " " + last; 
} 

var user = new User("John", "Resig"); 
user.name // John Resig 
var user2 = User ("first","last"); 
user2.name //undefined, also this would pollute your current scope 

jeśli wywołanie konstruktora, nie dostanie jakiegokolwiek wskazania i może być koszmar debugowania.

sposób, aby rozwiązać ten jest

function User(first, last){ 
    if (this instanceof User) { 
    this.name = first + " " + last; 
    } else 
    return new User(first, last); 
} 

do wniosku,

Więc jeśli czujesz, że konstruktor jest najlepszym sposobem dla swojego problemu, użyj go. Ale pamiętaj, że prosta instancja klasowa Johna jest naprawdę użytecznym wzorcem, spróbuj przejść przez to, wyjaśnia również generyczny konstruktor.

0

Użyj funkcji konstruktora. Nie bój się "nowego", po prostu używaj go mądrze.

Uwaga: Standardowa konwencja nazewnictwa to nazwy funkcji, które będą używane jako konstruktory funkcji z wielką literą. (to znaczy.ModuleClass zamiast moduleClass)

function ModuleClass() { 
    var a =5; 
    return { 
    getA: function() { 
    console.log(a); 
    } 
    }; 
}; 

lub jeśli jesteś na tyle odważny, aby dowiedzieć się o „tym” słowo kluczowe w JavaScript.

function ModuleClass() { 
    var a =5; 
    this.getA = function() { 
    console.log(a); 
    }; 
}; 

var instance = new moduleClass(); 
instance.getA(); 
Powiązane problemy