Ну у меня есть этот конструктор с одним секретом и один метод:Можно ли определить метод priviledge вне конструктора?
function Keeper(get) {
var secretPower = 'wisdom';
this.get = get ? get : function() {
return 'Its secret power is: ' + secretPower;
}
// now this is privileged method only in case that there are no arguments?
}
Теперь я сделать два экземпляра, один имеет привилегированный метод ...
var yourKeeper = new Keeper();
yourKeeper.get(); // "Its secret power is: wisdom"
... но другое одно другой. Это может коснуться контекст вокруг него, но не рядовых конструктору ...
var myKeeper = new Keeper(function() {
return 'Its secret power is: ' + secretPower;
});
myKeeper.get(); // ReferenceError: secretPower is not defined
... и это не работает, как я хочу:
myKeeper.get = function() {
return 'Its secret power is: ' + secretPower;
}
myKeeper.get(); // ReferenceError: secretPower is not defined
Конечно, это не будет работать , потому что secretPower
глобальная переменная в этих случаях, так:
var secretPower = 'none';
myKeeper.get(); // "Its secret power is: none"
так возможно определить метод Priviledge вне конструктора? Как?
Можно ли это сделать с помощью eval? (Я знаю ... это зло ... Мне просто интересно)
Благодарим вас за ответ. Во всяком случае, у меня есть вопрос: Создайте новый экземпляр Хранителя и передайте функцию в качестве аргумента. Попробуйте вернуть secretPower с этой функцией. Это возможно, только если вы создаете экземпляр внутри пространства имен. Я понимаю, что defaultGet является привилегированной функцией, созданной вне конструктора. Во всяком случае, он по-прежнему привязан к пространству имен ... который, как ни странно, подразумевает, что он находится внутри конструктора. –
@Windkiller No. Есть только один экземпляр 'defaultGet', который является общим для всех экземпляров' Keeper'. –