2012-01-19 15 views
5

Podczas używania wzorca modułu w javascript należy zdefiniować konstruktory, jeśli w ogóle. Chciałbym, aby mój konstruktor pasował do standardowego wzorca modułu i nie był globalny.Konstruktory we wzorcu modułów

Dlaczego coś takiego nie działa, czy jest kompletne i kompletne bzdury?

+0

'self.name' jest ciągiem' „John” 'więc nie można wywołać go. Zwróć uwagę, że twoja lokalna funkcja 'name' nie jest nigdzie eksportowana. – Raynos

+0

Zaktualizowane pytanie, ale zrobiło doskonale dobrą odpowiedź, nie ma sensu, więc zmieniło ją z powrotem. – zode64

Odpowiedz

1

Musisz przynieść tę metodę i dołączyć ją do prototypu Osoba. Ale kiedy to zrobić, trzeba właściwość imię, nazwisko i sposób, który nie będzie działać, więc rozważyć zmianę nazwy tego ostatniego

HOUSE.Person.prototype.getName = function(){ 
    return this.name; 
} 

OR, można po prostu dołączyć go do this i dokonać getName A uprzywilejowany sposób:

Person: function() { 
     this.name = "john"; 
     this.getName = function() { 
      return this.name; 
     } 
    } 
+0

Myślę, że masz mały problem z składnią. :) – pimvdb

+0

Tak więc przypisanie 'var self = this', więc nie zmienia się nie jest wymagane? – zode64

+0

Czy ta myśl jest również dobrą praktyką? – zode64

2

Stosując var i function foo() {} (wyrażonej jako oświadczenia, co oznacza „tylko” function foo() {} bez przypisywanie) tworzenia lokalnych symboli. Tak więc funkcja nie jest dostępna poza konstruktorem.

Cokolwiek chcesz wystawiać (do wiadomości publicznej), należy przypisać do this (lub self ponieważ zdefiniowane self = this):

self.getName = function() { 
    return self.name; 
}; 

pamiętać, że już używany name, więc dałem funkcję inną nazwą. Jeśli chcesz, aby ciąg znaków name był lokalny i eksponował funkcję, mogą one mieć tę samą nazwę, ponieważ nie ma konfliktu. Np .:

var name = "john"; 

self.name = function() { 
    return name; 
}; 
3

Twój kod jest prawie w porządku. Jednak funkcja name() nie była publiczna, ale zmienna była taka, że ​​próbowano wykonać zmienną powodującą błąd. Dodaj funkcję getName na obiekt i nazywają to zamiast:

var HOUSE = function() { 
    return { 
     Person: function() { 
      var self = this; 
      self.name = "john"; 
      self.getName = function() { 
       return self.name; 
      } 
     } 
    }; 
}(); 

var me = new HOUSE.Person(); 
alert(me.getName()); 

http://jsfiddle.net/8nSbP/

+1

Czy ta myśl jest dobrą praktyką? – zode64

Powiązane problemy