在对象文字中,我们应该能够使用this.name
访问这些方法,但在我的情况下,我使用this.init()
来触发方法,但却给了我未定义的函数。但是,如果我引用allTabAnimation.init()
它有效,为什么会这样?
var allTabAnimation = {
desktopClick: function (){
$('.allForms .investorOptions .investorOptions-wrapper .select-options input+label').click(function (e){
$this = $(this),
$thisHookNumber = $(this).data("hook"),
$allTab = $(".tab-content"),
$selectedTab = $(".tab-content[data-hook="+$thisHookNumber+"]"),
this.init(); // doesn't work
// allTabAnimation.init(); // this work
});
},
init: function (){
this.condition($selectedTab, $allTab);
},
答案 0 :(得分:4)
将this
存储在变量中(或使用.bind
或$.proxy
),因为在您的情况下this
指的是不是父对象的元素,如此
var allTabAnimation = {
desktopClick: function() {
var self = this;
$('.allForms .investorOptions .investorOptions-wrapper .select-options input+label').click(function(e) {
$this = $(this),
$thisHookNumber = $(this).data("hook"),
$allTab = $(".tab-content"),
$selectedTab = $(".tab-content[data-hook=" + $thisHookNumber + "]")
self.init();
});
},
init: function() {
this.condition($selectedTab, $allTab);
}
}
答案 1 :(得分:1)
范围(this)在回调中发生变化,这就是为什么你需要将它声明为变量。遵循约定,您应该使用
var that = this;