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

Accessing var function within function in another file

本文关键字:函数 访问 var 另一个 文件      更新时间:2023-09-26

我有2个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);
    });
};

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

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

解决方案是其他两个答案的组合。

  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()方法,但有很多方法来写这个,使它正确工作;