在javascript中检索正确的“this”
我建立了自己的目标:在javascript中检索正确的“this”,javascript,Javascript,我建立了自己的目标: Main.utilities.pool = function (pool) { var counter=0; var $form = $(pool); return { add_pool_field: function(){ $form.find('#practice_type').change(function() { if($(this).find("option:sele
Main.utilities.pool = function (pool) {
var counter=0;
var $form = $(pool);
return {
add_pool_field: function(){
$form.find('#practice_type').change(function() {
if($(this).find("option:selected").val()){
var time = new Date().getTime();
var regexp = new RegExp( $(this).find("option:selected").data('id'), 'g');
$("#items").append('<li class="colorize">' + '<h1>' + this.increment_counter() + '</h1>' + $(this).find("option:selected").data('fields').replace(regexp, time) + '</li>');
}
});
},
increment_counter: function(){
return ++counter;
},
init: function() {
this.add_pool_field();
}
}
}
问题出在更改事件中,这指的是选择字段。但是,我想访问从pool函数返回的实际anynomous对象的increment_counter函数。当我尝试this.increment_计数器时,它认为这是html选择字段,所以它爆炸了。如何在传递给change的函数的上下文中访问该对象?您需要保留对所需对象的引用,通过其他变量将其声明为变量-
var t = this;
然后在change函数中,在希望访问对象的this的位置使用t。只需在add\u pool\u字段的本地范围中保存对此的引用
@听着,这是一个仓促的打字错误。是的,我应该自己解决这个问题。传递给change的匿名函数创建一个闭包。这将使包含函数中的所有内容保持在范围内,其中包括局部变量,如self。因此,self现在存储对对象的引用,因此可以在匿名内部函数中使用。
var t = this;
add_pool_field: function(){
var self = this;
$form.find('#practice_type').change(function() {
if($(this).find("option:selected").val()){
var time = new Date().getTime();
var regexp = new RegExp( $(this).find("option:selected").data('id'), 'g');
$("#items").append('<li class="colorize">' + '<h1>' + self.increment_counter() + '</h1>' + $(this).find("option:selected").data('fields').replace(regexp, time) + '</li>');
}
});
},