Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript &引用;这";在我的班上_Javascript_Oop - Fatal编程技术网

Javascript &引用;这";在我的班上

Javascript &引用;这";在我的班上,javascript,oop,Javascript,Oop,我正在使用。它允许您定义可以从中继承的“类”。我发现了一个限制:我不能从嵌套函数中引用类结构/基类(this) 比如说 var myclass = anotherclass.extend({ dostuff: function() { $('#myelem').animate({ top: 100 }, function() { this.saystuff('Done'); }); }, saystuff: function(Message) {

我正在使用。它允许您定义可以从中继承的“类”。我发现了一个限制:我不能从嵌套函数中引用类结构/基类(this)

比如说

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。