Техническая причина, по которой эти методы скрыты, двояка.
Во-первых, когда вы выполняете метод для объекта Test, «this» будет нетипизированным объектом, возвращаемым в конце анонимной функции, которая содержит публичные методы согласно Module Pattern .
Во-вторых, методы testOne, testTwo и testThree не привязаны к конкретному объекту и существуют только в контексте анонимной функции. Вы можете прикрепить методы к внутреннему объекту, а затем выставить их через публичный метод, но он не будет таким же чистым, как исходный шаблон, и это не поможет, если вы получите этот код от третьей стороны.
Результат будет выглядеть примерно так:
var Test = function() {
var private = {
testOne : function () {},
testTwo : function () {},
testThree : function () {}
};
function getMethods() {
for (i in this) {
alert(i); // shows getMethods, but not private methods
}
for (i in private) {
alert(i); // private methods
}
}
return { getMethods : getMethods }
}();
// will return ['getMethods', 'testOne', 'testTwo', 'testThree']
Test.getMethods();
редактирование:
К сожалению, нет. Набор локальных переменных недоступен через одно автоматическое ключевое слово.
Если вы удалите ключевое слово «var», они будут присоединены к глобальному контексту (обычно объекту окна), но это единственное, что мне известно о поведении, похожее на то, что вы описываете. Если бы вы сделали это, у этого объекта было бы много других свойств и методов.