...
$.fn.annotateEdit = function(image, note) {
if (note) {
this.note = note;
} else {
var newNote = new Object();
newNote.id = "new";
this.note = newNote;
}
}
...
var mynote = this.note;
form.find(':radio').change(function() {
var vacancy = $(this).attr('value');
mynote.vacancy = vacancy;
});
...
是否可以在不定义"this.note“的情况下从change()处理程序访问"mynote"?
发布于 2012-02-06 00:09:59
我使用这样的模式,这样我就可以访问封闭作用域中的任何内容:
var that = this;
...
form.find(':radio').change(function () {
that.note.vacancy = $(this).attr('value');
});
我是这个模式的粉丝,因为它使代码更具可读性。在我看来,很明显,它被访问的内容是封闭作用域的一部分(只要that
的使用是一致的)。
发布于 2012-02-06 00:14:06
使用$.proxy
将其绑定到函数...
// Returns a function-------v
form.find(':radio').change( $.proxy(function() {
var vacancy = $(this).attr('value');
mynote.vacancy = vacancy;
}, this) );
// ^---- ...that has its "this" value set as this argument.
发布于 2012-02-06 00:13:13
它没有专门的语言机制。常见的模式是将闭包存储在外部函数的本地( this
)变量(通常名为self
或that
)中:
var self = this;
var innerFunction = function() {
self.x = 1;
};
https://stackoverflow.com/questions/9150676
复制相似问题