我有一个关于在jQuery中访问变量的简单问题。当我在点击'a'时调用read函数时,是否有办法访问变量(换行)。
(function() {
var Example= {
init: function() {
var wrap = 'hello world';
$('a').on('click', this.read);
},
read: function() {
console.log(wrap)
}
};
Example.init();
})();
答案 0 :(得分:3)
(function() {
var wrap;
var Example= {
init: function() {
wrap = 'hello world';
$('a').on('click', this.read);
...
因为函数可以访问从定义范围可见的所有变量。
答案 1 :(得分:3)
有几种方法可以实现这一目标。也许最简单的方法是更改'wrap'变量的范围。目前,由于它在init
函数内部使用var声明,因此它的作用域为init
函数,并且不能直接在init
之外使用。所以,你可以在init
之外声明'wrap'(它可能是'Example'对象的属性):
var Example= {
wrap: 'hello world',
init: function() {
var self = this;
$('a').click(function(){
self.read();
});
},
read: function() {
console.log(this.wrap);
}
};
Example.init();
这使'wrap'作用于'Example',并在'Example'中定义的任何函数中作为'Example'的属性提供。
(编辑:必须稍微调整一下才能正确处理闭包。)
答案 2 :(得分:0)
(function() {
var Example= {
init: function() {
this.wrap = 'hello world';
$('a').on('click', this.read);
},
read: function() {
console.log(this.wrap)
}
};
Example.init();
})();
答案 3 :(得分:0)
试试这个:(小提琴:http://jsfiddle.net/jRJFQ/3/)
(function(){
var Example= {
wrap:null,
init: function() {
this.wrap = 'hello world';
$('a').on('click', this.read);
},
read: function() {
console.log(Example.wrap)
}
};
Example.init();
})();
答案 4 :(得分:0)
如果您考虑使用揭示模块模式,您可以定义哪些变量是私有的,哪些变量是公共的,如下所示:
var Example = (function(){
var wrap = 'hello world',
init = function(){
...
},
read = function(){
... // You can use `wrap` here
};
return { // Return public variables and methods
init: init,
read: read
};
})();
Example.init();
答案 5 :(得分:-1)
是的,应该这样做:
(function() {
var wrap;
var Example= {
init: function() {
var wrap = 'hello world';
$('a').on('click', this.read);
},
read: function() {
console.log(wrap)
}
};
Example.init();
})();