我有两个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);
});
};
答案 0 :(得分:1)
您定义Location
的方式,它是函数Place
中的私有变量。如果您想将其作为Place
的属性进行访问,则应将var Location = ...
替换为this.Location = ...
答案 1 :(得分:0)
它超出了范围。因为您将Place对象包装在function($) {}
中,所以现在包装器外的任何内容都将无法再访问包装器中的变量。如果$代表jQuery,它应该是一个全局的,你可以把包装器拿出来。
答案 2 :(得分:0)
解决方案是另外两个答案的组合。
Place
定义为(匿名)函数中的变量。它不能在该函数的范围之外使用。 (此函数也不使用jQuery,因此不需要包装器。)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()
方法,但是有很多方法可以编写它以使它正常工作;这应该可以解决你的问题。)