Javascript 类中的变量作用域

Javascript 类中的变量作用域,javascript,jquery,Javascript,Jquery,我的视野和课堂都有问题 如果有人能向我解释我做错了什么,那就太好了。我试图在整个类中获取测试变量(在真实的类中是其他的,但这给出了一个易于理解的示例) 我已经对上面的代码进行了评论,其中测试变量记录为ok,而没有。我的鼠标移动也有问题。这失败了: function(){ "use strict"; var FileCrop = function() { this.init(); }; var p = FileCrop.prototype = lx.BaseClass.extend(l

我的视野和课堂都有问题

如果有人能向我解释我做错了什么,那就太好了。我试图在整个类中获取测试变量(在真实的类中是其他的,但这给出了一个易于理解的示例)

我已经对上面的代码进行了评论,其中测试变量记录为ok,而没有。我的鼠标移动也有问题。这失败了:

function(){
"use strict";

var FileCrop = function() {
    this.init();
};

var p = FileCrop.prototype = lx.BaseClass.extend(lx.BaseClass);
p.BaseClass_init = p.init;


p.test = 'test';

p.init = function() {
    // Super
    this.BaseClass_init();
    // Init
    this.ready();

};

p.ready = function() {

    this._initEvents();

};
p._initEvents = function() {
    console.log(this.test); //this works

    this.cropBox.on('mousedown', this.mouseDown);
    $(document).on('mouseup', this.mouseUp);

};

p.mouseDown = function(e) {

console.log(this.test);//this is undefined
    $(document).on('mousemove', this.mouseMove);


};

 p.mouseMove = function(e) {
     console.log('mouse is moving'); //this is never called
 };


lx.FileCrop = FileCrop;
}(window));
鉴于此项工作:

$(document).on('mousemove', this.mouseMove);

我只是想知道为什么会出现这种情况,因为我可以在鼠标按下时使用“this”,并且它可以工作。

您需要明确确保在事件处理程序中使用的
this
的值是对对象的引用。当您使用像this.mouseDown这样的表达式时,这不会自动发生。这将获得对函数的引用,但与
this
引用的对象的关系不会保留

在现代JavaScript环境中,一种简单的方法是

$(document).on('mousemove', p.mouseMove);

.bind()
函数返回另一个函数,该函数将调用最初需要的函数(您的“mouseDown”函数),该函数的值为
,该值保证是您通过参数请求的值。

此外,既然您有变量,为什么不
p.mouseMove
?基本上在之前,鼠标按下时,它没有对我的类的引用,但现在它有了,因此它可以访问我的所有类变量?关键是函数中
this
的值仅取决于函数的调用方式。
  this.cropBox.on('mousedown', this.mouseDown.bind(this));