在另一个文件中访问函数内的var函数

时间:2015-10-12 01:49:42

标签: javascript jquery

我有两个JS文件 - 一个包含我想要访问的功能,另一个我想用这个函数调用。

(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);
    });
};

3 个答案:

答案 0 :(得分:1)

您定义Location的方式,它是函数Place中的私有变量。如果您想将其作为Place的属性进行访问,则应将var Location = ...替换为this.Location = ...

答案 1 :(得分:0)

它超出了范围。因为您将Place对象包装在function($) {}中,所以现在包装器外的任何内容都将无法再访问包装器中的变量。如果$代表jQuery,它应该是一个全局的,你可以把包装器拿出来。

答案 2 :(得分:0)

解决方案是另外两个答案的组合。

  1. 您将Place定义为(匿名)函数中的变量。它不能在该函数的范围之外使用。 (此函数也不使用jQuery,因此不需要包装器。)
  2. Place是一个功能。它执行将局部变量Location设置为函数的代码,但不导出该函数,因此在Location()函数之外无法访问Place
  3. 你可能意味着让Place成为一个对象(而不是一个函数),并给它一个Location方法。这是编写它的一种方法:

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

    (看起来你没有发布所有代码,比如Place.init()方法,但是有很多方法可以编写它以使它正常工作;这应该可以解决你的问题。)