【发布时间】:2011-11-01 14:01:06
【问题描述】:
我刚刚开始使用 OO javascript,所以请多多包涵。
这行得通:
var myObj = {
foo : function() {
alert('hello');
this.bar();
},
bar: function() {
alert('world');
}
}
但是,如果我在“foo”方法中的 hello 警报之后执行一些其他操作,则“this”的含义会从对象更改为我上次选择的任何内容,因此使用 this.bar() 不会执行班级。
所以我尝试将“this”缓存在一个变量中,如下所示:
var myObj = {
publicVars: {
theObj : this
},
foo : function() {
alert('hello');
publicVars.theObj.bar();
},
bar: function() {
alert('world');
}
}
但这也没有用。那么解决办法是什么?
编辑
这是我的实际代码:
var formObj = {
validate : function(theForm) {
$('input, textarea', theForm).each(function() {
var valueLength = $(this).val().length;
if (valueLength === 0) {
$(this).addClass('invalid');
this.listenForInput($(this)); // <!------- this isn't working
}
});
},
listenForInput : function(theField) {
// theField.keyup(function() {
// if ($(this).val().length > 0) {
// theField.removeClass('invalid');
// }
// });
alert('I work!!!!');
}
} // end obj
【问题讨论】:
-
什么是“其他东西”,因为它不应该在那个对象内部改变。
-
你说的“其他东西”是什么?如果您正在创建回调,那么
this将引用window(很可能)。在这种情况下,您只需首先在foo内创建对this的引用。 -
我在编辑中发布了我的实际代码。请看一看。
-
关于您更新的代码,您似乎希望
this引用您的formObj,同时引用DOM 元素。那是不会发生的。this.listenForInput($(this));
标签: javascript jquery oop