Javascript &引用;这";在我的班上
我正在使用。它允许您定义可以从中继承的“类”。我发现了一个限制:我不能从嵌套函数中引用类结构/基类(this) 比如说Javascript &引用;这";在我的班上,javascript,oop,Javascript,Oop,我正在使用。它允许您定义可以从中继承的“类”。我发现了一个限制:我不能从嵌套函数中引用类结构/基类(this) 比如说 var myclass = anotherclass.extend({ dostuff: function() { $('#myelem').animate({ top: 100 }, function() { this.saystuff('Done'); }); }, saystuff: function(Message) {
var myclass = anotherclass.extend({
dostuff: function() {
$('#myelem').animate({ top: 100 }, function() { this.saystuff('Done'); });
},
saystuff: function(Message) {
alert(Message);
}
});
var foo = new myclass();
foo.dostuff();
当脚本调用回调函数时,回调函数依次调用this.saystuff,它试图为我正在包装回调函数的未命名函数调用一个方法,因此我无法调用函数链
我找到的唯一解决方法是调用创建对象的变量,但这不是一个好主意,因为变量名应该可以随时更改
任何帮助都将不胜感激。这超出了范围
dostuff: function() {
var that=this;
$('#myelem').animate({ top: 100 }, function() { that.saystuff('Done'); });
},
看起来您正在使用带有代理的jQuery
dostuff: function() {
$('#myelem').animate({ top: 100 }, $.proxy(this, this.saystuff, 'Done'); });
},
这超出了范围
dostuff: function() {
var that=this;
$('#myelem').animate({ top: 100 }, function() { that.saystuff('Done'); });
},
看起来您正在使用带有代理的jQuery
dostuff: function() {
$('#myelem').animate({ top: 100 }, $.proxy(this, this.saystuff, 'Done'); });
},
“基类”并非天生无法访问。问题在于,这个
关键字只是在每个新的嵌套范围内重新调整用途,以引用不同的上下文。在传递给animate
的回调中,此
引用包装元素的jQuery集合
解决此问题的一种方法是在变量中捕获上下文并将其包含在回调中:
dostuff: function() {
var that = this;
$('#myelem').animate({ top: 100 }, function() { that.saystuff('Done'); });
}
“基类”并非天生无法访问。问题在于,这个
关键字只是在每个新的嵌套范围内重新调整用途,以引用不同的上下文。在传递给animate
的回调中,此
引用包装元素的jQuery集合
解决此问题的一种方法是在变量中捕获上下文并将其包含在回调中:
dostuff: function() {
var that = this;
$('#myelem').animate({ top: 100 }, function() { that.saystuff('Done'); });
}
这会起作用,但我必须为每个函数都这样做吗?必须有一种自动化的方法。
$。代理看起来很有用,但我想尝试一下,并且在框架中保持模糊。我想我会同意你的第一个建议。@Jared然后使用bind
-@Jared你也可以按名称引用对象,即myclass.saystuff('Done')代码>。这在函数之间保持一致,并且不需要在每个方法中创建变量来捕获上下文。@Asad我不想硬编码对象变量名。这不是OOP应该如何工作的。那会工作的,但我必须为每个函数都这样做吗?必须有一种自动化的方法。$。代理看起来很有用,但我想尝试一下,并且在框架中保持模糊。我想我会同意你的第一个建议。@Jared然后使用bind
-@Jared你也可以按名称引用对象,即myclass.saystuff('Done')代码>。这在函数之间保持一致,并且不需要在每个方法中创建变量来捕获上下文。@Asad我不想硬编码对象变量名。这不是OOP的工作方式。谢谢你的回答,但是你迟到了30秒。另外,在使用$.proxy()
时添加了epascarello。感谢您的回答,但您迟到了30秒。另外,在使用$.proxy()
时添加了epascarello。