2015-10-30 3 views
0

Из-за угловых фабрик, я думаю об использовании класса, который использует некоторые методы, которые находятся на его закрытии, как если бы они были частными методами.Класс, который зависит от его закрытия

Это не 100% классическое наследование и не раскрывающий шаблон, поэтому я не уверен, что это правильно или нет. Вот небольшой пример:

myClass = (function() { 
    function privateMethod (stuff) { return something } 
    function TheClass() { this.someValue = 'Hello'} 
    TheClass.prototype.someMethod = function() { return privateMethod(this.someValue)} 
    return TheClass 
}()); 

А потом что-то вроде

instance = new myClass() 

Я думаю, что это работает отлично для вспомогательных функций или частных методов, которые не изменяют значения экземпляра объекта. Использование частных «переменных» может быть полезно для классов singelton или, возможно, для фиксированных значений.

Есть ли проблемы с этой реализацией?

ответ

0

Это типично хорошо, и важно, чтобы большинство классов зависело от их закрытия. Обычно ваш класс будет в собственном файле - собственный модуль. Если вы используете модуль загрузчик (я надеюсь, что вы), то закрытие уже подразумеваются и методы уже «частные», когда определяются, как это:

// Begin MyClass.js 
function privateMethod (stuff) { return something } 
function TheClass() { this.someValue = 'Hello'} 
TheClass.prototype.someMethod = function() { return privateMethod(this.someValue)} 

// depending on which module loader you are using 
return TheClass; 
module.exports = TheClass; 
export default TheClass; 
+0

В данном конкретном случае я использую угловые заводы, так Я думаю, мы можем рассматривать его как загрузчик модулей. Но даже если я этого не сделаю, я думаю, что эта реализация будет прекрасной для просто функций. Как насчет использования внутренних переменных? Я сделал некоторые тестовые и внутренние объекты, которые будут доступны для всех экземпляров. Это произойдет и с примитивами? – Danielo515

+0

Это неясно, о чем вы спрашиваете, но я считаю его важной особенностью JavaScript, что вы можете иметь закрытие и «скрытые» переменные. Например, вы можете сохранить частный массив, который отслеживает каждый экземпляр вашего класса или частный объект, который хранит ответы на запросы AJAX. Все экземпляры могли (и должны) иметь доступ к ним. Любая переменная, определенная в этом закрытии, является общей. Но помните, примитивы передаются по значению, тогда как свойства объекта передаются по ссылке. Это отдельная дискуссия. Погугли это. –

Смежные вопросы