我已经建立了自己的对象:
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();
}
}
}
我称之为:
var $profile_pool = Main.utilities.pool($('#new_form')).init();
问题在于更改事件,这是指选择字段。但是,我想访问从池函数返回的实际anynomous对象的increment_counter函数。当我尝试this.increment_counter()时,它认为这是html选择字段,因此它会爆炸。如何在传递给change的函数的上下文中获得对该对象的访问权限?
答案 0 :(得分:1)
只需在this
的本地范围内保存对add_pool_field()
的引用。
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>');
}
});
},
答案 1 :(得分:0)
您需要通过其他变量将其声明为变量来保留对所需this
的引用 -
var t = this;
然后在更改功能中,使用t
您想要访问对象的this
。