#javascript #function #public
#javascript #функция #общедоступный
Вопрос:
Я пытаюсь написать общедоступную функцию, которая может вызываться как внутри объектной функции, так и вне объектной функции. Например, вот очень простой объект приветствия с общедоступной функцией hello, которая выводит hello.
var greeting = function()
{
this.hello = function(){ console.log("hello"); }
this._hello = function()
{
hello(); // first call, Uncaught ReferenceError: hello is not defined
}
_hello(); // second call, Uncaught ReferenceError: hello is not defined
}
var g = new greeting();
g.hello(); // third call, Good
Функция hello, очевидно, определена в самой функции приветствия, но почему она получает неперехваченную ошибку ссылки: hello не определен из первого вызова и второго вызова, но не в третьем вызове выше.
Комментарии:
1.
this.hello()
— проблема решена.2. Что, если эта строка такая. _hello = функция() становится функцией _hello()
3. Просто чтобы ответить на мой собственный вопрос, если _hello становится частной функцией, первым вызовом hello будет this.hello();, вторым должен быть _hello.call(this);
Ответ №1:
Это потому, что когда вы используете this
префикс для определения функции, ее нельзя вызвать без префикса, как вы пытаетесь сделать. Использование this
префикса делает его свойством, которое может быть вызвано только с использованием this
префикса или любого другого префикса, который ссылается на экземпляр объекта. Без префикса функция должна находиться либо в локальной, либо в более высокой области видимости.
Если вы хотите вызвать это как свойство с префиксом, а также без префикса внутри объекта, вы можете сделать:
var greeting = function()
{
function hello()
{
console.log("hello");
}
this.hello = hello;
hello();
}
var g = new greeting();
g.hello();
Это создает локальную функцию hello
, которая не является свойством. Затем он создает свойство, hello
которое ссылается на локальную функцию hello
.
Ответ №2:
Потому что вы пытаетесь вызвать методы без ссылки на объект (this)
Комментарии:
1. Я действительно думаю, что вопросы под тегом JavaScript становятся все более и более тривиальными.
Ответ №3:
Вам нужно вызвать hello с псевдонимом его объекта (‘this.hello’). Это единственный способ получить доступ к этой функции.
Не хочу показаться грубым, я думаю, вам нужно больше читать из некоторых ресурсов JavaScript для начинающих.