Поскольку у вас есть два разных значения, которые вы хотите использовать, и jQuery уже помещает один из них в this
, вы можете просто сохранить другое значение в переменной в более высоком объеме:
NameSpace.object = {
functionOne: function(){
// stuff
},
functionTwo: function(){
this.functionOne(); // this works correctly
},
functionThree: function(){
// save value if this so it can be used later in this scope
var self = this;
$('input').change(function(){
if ($(this).val() > 1) {
self.functionOne();
}
}
}
}
Или, так как это статически с именем NameSpace.object
, вы также можете просто ссылаться на это имя сразу:
NameSpace.object = {
functionOne: function(){
// stuff
},
functionTwo: function(){
this.functionOne(); // this works correctly
},
functionThree: function(){
$('input').change(function(){
if ($(this).val() > 1) {
NameSpace.object.functionOne();
}
}
}
}
Или, так как JQuery предоставляет механизм .change([eventData], handler)
для передачи данных в обработчик событий, вы можете использовать это тоже:
NameSpace.object = {
functionOne: function(){
// stuff
},
functionTwo: function(){
this.functionOne(); // this works correctly
},
functionThree: function(){
$('input').change(this, function(e){
if ($(this).val() > 1) {
e.data.functionOne();
}
}
}
}
Механизм JQuery не мой любимый здесь, потому что я думаю, что код, который вызывает e.data.functionOne()
менее очевидно (читателю нужно оглянуться в коде, чтобы выяснить, что такое e.data
), но это только мое личное мнение по этой ситуации.
Опечатка? У вас есть две 'functionTwo' – j08691
и без запятой после первой 'functionTwo:' либо? –
'this.functionOne()' не существует в области 'functionThree'; 'this' ссылается на объект jQuery внутри там (обработчик события) для элемента ввода –