2015-10-12 5 views
0

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

(function($) { 
    var Place = function() { 
     var Location = function(id, duration, check) { 
      //Should access this function 
     } 
    } 
})(jQuery); 

Я пытаюсь получить к нему доступ с:

Place.Location(markerId, 600); 

Но все, что я получаю то, что она не определена. Простая проблема, но она не может понять это.

Как это плагин jQuery, может быть, есть способ получить доступ к нему с помощью другого метода?

$.fn.place = function(params) { 
    var len = this.length; 

    return this.each(function(index) { 
     var me = $(this), 
      key = 'place' + (len > 1 ? '-' + ++index : ''), 
      instance = (new Place).init(me, params); 
    }); 
}; 

ответ

0

Это выходит за рамки. Поскольку вы завернули свой объект Place в function($) {}, теперь все, что находится за пределами этой оболочки, больше не будет иметь доступа к переменным внутри оболочки. Если $ обозначает jQuery, он должен быть глобальным в любом случае, и вы можете извлечь оболочку.

+0

Спасибо, Дэвид. Поэтому, если я удалю внешнюю оболочку, я тогда смогу использовать 'Place.Location()'? –

+0

Да! Вы можете передать любой параметр, который вам нужен, и непосредственно, выполнив команду var var = function (* arguments *) {}; ' –

+0

Еще раз спасибо. Я удалил внешнюю функцию, а затем попытался получить доступ к ней с помощью «Place.Location (* args *)», но все равно говорит то же самое. –

1

Способ, которым вы определяете Location, является частной переменной внутри функции Place. Если вы хотите получить к нему доступ в качестве атрибута Place, вы должны заменить var Location = ... на this.Location = ...

+0

Спасибо, но тогда 'Местоположение' не определен. –

0

Решение является комбинацией двух других ответов.

  1. Вы определяете Place как переменную в (анонимной) функции. Он не может использоваться вне сферы действия этой функции. (Эта функция не использует jQuery, так что оболочка не нужна).
  2. Place - это функция. Он выполняет код, который устанавливает локальную переменную Location функции, но не экспортирует эту функцию, поэтому Location() недоступен вне функции Place.

Возможно, вы хотите сделать Place объект (а не функцию) и дать ему метод Location. Вот один из способов, чтобы написать это:

var Place = { 
    Location: function(id, duration, check) { 
     // do something with id, duration, & check 
    } 
}; 

// execute 
Place.Location(someId, someDuration, someCheck); 

(Это не выглядит, как Вы разместили весь код, как метод Place.init(), но есть много способов, чтобы написать это так, что он работает правильно, это должен решить вашу непосредственную проблему.)

Смежные вопросы