Я просто собираюсь предположить, что у вас есть некоторые функции, которые используются в конструкторе, но не являются частью общедоступного API.
В этом случае одним из вариантов будет просто сохранить их как свойство конструктора. Затем, вызывая их в конструкторе, вы будете использовать метод .call()
для установки контекста текущего объекта, который создается.
Таким образом, вы автоматически получаете доступ к открытым членам через this
и к закрытым переменным, если вы передаете их в качестве аргумента.
var myClass = function() {
this.someprop = 'prop value';
var privVar = 'private value';
myClass.func.call(this, privVar);
};
myClass.func = function(priv){
alert(this.someprop);
alert(priv);
};
var inst = new myClass;
Так что это просто использует функцию MyClass
в качестве хранилища пространства имен для функции, которая используется конструктором. Конструктор вызывает его из контекста this
, который что-то делает с this.someProperty
и privVar
, который передается внутрь.
Не уверен, что это то, что вам нужно, но это один из вариантов.
Как правильно отмечено @ Raynos в комментариях ниже, любые свойства, добавленные в конструктор MyClass
в качестве простого хранилища пространства имен, вообще не являются частными, и к ним может обращаться любой код, который может получить доступ к конструктор.
Вы можете выполнить некоторую проверку, чтобы убедиться, что она вызывается правильно, например, добавив проверку instanceof
, чтобы убедиться, что она вызывается из экземпляра MyClass
, но такие проверки совсем не безопасны и не предлагают защита реальных частных членов.