2013-07-18 3 views
8

Я использую шаблон модуля в javascript. Это способ создания экземпляров «класса»? Я использую его в правильном направлении?Передача параметра модулю javascript

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

http://jsfiddle.net/PzLKy/ Как я могу передать параметры на новых экземпляров?

+0

использовать функцию-конструктор вместо литерала, если вы хотите передать параметры во время создания экземпляра. – dandavis

+0

В коде отсутствует классная конструкция. У вас просто синглтон, сгенерированный с помощью шаблона модуля. Что вы * хотите * - только тогда мы сможем сказать вам, что код верен? – Bergi

+0

Я хочу, чтобы иметь возможность объявлять новые экземпляры и передавать разные значения. Я не хочу делать что-то конкретное, я просто изучаю. – Petran

ответ

-1

Для создания экземпляров вы должны использовать ключевое слово new с любой функцией. Этой функция аки Конструктор может помочь вам создать несколько экземпляров

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

Конструктор Конструкторов используются с новым ключевым словом, и они один из способов дать объекту прототип.

СМОТРИТЕ ->

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

Вы сами сказали, что 'новый' должен использоваться с ** функцией ** ... – Bergi

+0

Вы пробовали свой код перед публикацией? – dandavis

+0

Ой, я просто полностью пропустил скрипку ... через это сейчас! –

7

Вам не нужно здесь новый, Ниже правильный способ кодирования, чтобы достичь того, чего вы пытаетесь достичь. Кроме того, be really careful while using new, if used unwisely it can start clobbering your Global variable, если вы хотите использовать новым, Резиг имеет очень приятные объяснения о том, как сделать это правильно, более читать эту статью Резига 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(); 

Редактировать: contactmatt прав, определенно не бойтесь использовать конструктор, но вот что вам нужно знать

Взято из статьи Джона Ресига, упомянутой в первом абзаце,

предположим, это ваш код

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 

, если вы вызываете конструктор, вы не получите какой-либо индикации и может быть отладки кошмар.

способ решить это

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

Для Заключаем,

Так что, если вы чувствуете, что конструктор является лучшим способом для вашей проблемы, используйте его. Но имейте в виду, что простой экземпляр класса от Джона - действительно полезный образец, попытайтесь пройти его, он также объясняет общий конструктор.

0

Использование функций-конструкторов. Не бойтесь «нового», просто используйте его с умом.

Примечание: Стандартное соглашение об именах предназначено для обозначения функций, которые будут использоваться в качестве конструкторов функций с большой буквы. (Т.е.ModuleClass вместо moduleClass)

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

или, если вы достаточно смелы, чтобы узнать о «этом» ключевое слово в JavaScript.

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

var instance = new moduleClass(); 
instance.getA(); 
Смежные вопросы