无法访问对象文字中的方法
Unable to access method in object literal
在对象文字中,我们应该能够使用 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);
},
将 this
存储在变量中(或使用 .bind
, or $.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);
}
}
回调中的作用域 (this) 发生了变化,这就是为什么您需要将其声明为变量的原因。按照惯例,您应该使用
var that = this;
在对象文字中,我们应该能够使用 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);
},
将 this
存储在变量中(或使用 .bind
, or $.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);
}
}
回调中的作用域 (this) 发生了变化,这就是为什么您需要将其声明为变量的原因。按照惯例,您应该使用
var that = this;