#javascript #function #object #methods
#javascript #функция #объект #методы
Вопрос:
let foo={
name:"",
method:function(){
function bar(){
return "bar";
}
//bar(); //(2)
}
};
foo.method.bar(); //(1)
(1): выдает неперехваченную ошибку типа: c.method.bar не является функцией, я знаю foo.method.bar
, что она ищет ключ / имя свойства, вызываемое bar
внутри method
, но этого не существует, так как же мне вызвать bar
при доступе извне foo
, не делая этого (2)
Ответ №1:
Учитывая ваш текущий код, это невозможно, потому что после вызова ничего со ссылкой на bar
остается method
, и потому method
bar
что сам себя тоже не вызывает.
Если вы хотели что-то подобное, поместите bar
внешний объект, чтобы он был открыт:
let foo = {
name: "",
bar() {
return "bar";
},
method: function() {
}
};
console.log(foo.bar());
Теоретически было бы возможно поместить bar
функцию непосредственно в method
, но это было бы довольно странно:
let foo = {
name: "",
method: function() {
}
};
foo.method.bar = function() {
return "bar";
};
console.log(foo.method.bar());
Комментарии:
1.
because nothing with a reference to bar remains after method is called
О да, потому что контекст выполнения bar уже завершен после вызова метода.foo.method.bar
Это то же самое, чтоmethod: { bar:function(){return bar;}}