Доступ в функциях js

Рейтинг: 1Ответов: 1Опубликовано: 18.02.2015

Добрый день!

Есть код:

OBJ = function(arr){
    ON=true;

    function test(){
    console.log(ON);
    }

}

OBJ.prototype = {
start: function(){
    ON = true;
    OBJ.test;//Доступ к функции test внутри OBJ!!!!
},
stop: function(){
    ON = false;
}
}

Не работает эта часть OBJ.test;.
Должно запускать функцию test из OBJ, но не работает. По крайней мере я так думаю, что должно.

Что неверно?

Обновление

Функция, которая будет работать с картинкой и создавать анимацию, а точнее переходить по пикселях через определенный интервал. Функция test отвечает за переход на другие пиксели (внутри нее есть определенный интервал, через который будет делать переход, она рекурсивная). Функции start и stop обеспечивают запуск и остановку таких переходов. Start изменяет параметр On на true и вызывает функцию test, которая продолжит или начнет перемещение по картинке, по пикселям. Stop изменит параметр ON на false, что остановит роботу рекурсивной функции test благадоря if(ON){test();}, что и остановит анимацию.

Ответы

▲ 1

Изучайте области видимости, чтобы понять ошибку.

  1. Переменные внутри функции, которые создаются без ключевого слова var, проваливаются в глобальную область видимости и доступны из любого участка кода.
  2. Переменные, которые созданы во внутренней области видимости функции, не доступны извне.

Ваша работа с переменной ON возможна только потому, что она провалилась в глобальную область и доступна отовсюду. А вот функции не проваливаются, и, соответственно, к ней доступа вообще нет извне.

Если ваша цель создать из функции объект, то надо бы оставлять привязку к объекту через this. Хотя, возможно, я неправильно понял Ваши цели.

OBJ = function(arr){
    this.ON = true;
    this.test = function (){
        console.log(this.ON);
    }
}

OBJ.prototype = {
    start: function(){
        this.ON = true;
        this.test();
    },
    stop: function(){
        this.ON = false;
    }
}

o = new OBJ();
o.stop();
o.start();