Простой ответ на ваш вопрос: Нет .
Вы не можете ничего сделать, чтобы получить доступ к этим var
определенным вещам, если только ваша функция не находится в той же области действия, или вы как-то «обнародовали» информацию (возвращая ее или устанавливая ееthis
).
Если у вас есть доступ к редактированию исходной функции, вы можете переписать ее так, чтобы эти функции можно было «передать» в расширяющую функцию, которая может изменить «защищенную».сфера охвата объекта.Следующий код должен дать хорошее представление о том, что я предлагаю.
var Welcomer = function(name) {
var _protected = {
name: name,
message: function() {
return "Hi, " + _protected.name + "!";
}
};
return {
extendWith: function(extender) {
extender.call(this, _protected);
return this;
},
sayHi: function() {
alert(_protected.message());
}
};
};
var UnhappyWelcomer = function(name) {
var self = Welcomer(name).extendWith(function(_protected) {
_protected.sadMessage = function() {
return _protected.message() + " Miserable day, innit?";
};
// extending the public while still having scope to _protected...
this.sayHi = function() {
alert(_protected.sadMessage());
};
});
return self;
};
UnhappyWelcomer('bob').sayHi();