0

我有一个构造函数对象。在这个构造函数里面我有两个函数。一种称为window.onresize,另一种称为onBrowserResize。现在我想在window.onresize函数中调用onBrowserResize 。我该怎么做呢?

function MyObject() {
    window.onresize = function(event) {
        this.onBrowserResize();
    }

    this.onBrowserResize = function() {
    }
}

我想让函数公开,所以我可以这样称呼它:object.onBrowserResize();

如果我像这样将函数设为私有:var onBrowserResize = function()那么我无法在范围之外访问它。

有人知道怎么做吗?我可能只是对对象的范围有点困惑。

4

2 回答 2

2

在 JavaScript 中, 的值this取决于函数的调用方式。有关详细信息,请参阅MDN 文章this

您的问题缺少一些细节。我的回答是假设你有这样的事情:

var MyObj = function() {
    window.onresize = function(event) {
        this.onBrowserResize();
    }

    this.onBrowserResize = function() {}
}

这是这样的实例:

var myObj = new MyObj();

以下是实现这一目标的一些方法。

1. 只需将 this.onBrowserResize作为事件处理程序传递(最简单的方法,如果您的所有 onresize 处理程序都是调用onBrowserResize):

var MyObj = function() {
    window.onresize = this.onBrowserResize;
    this.onBrowserResize = function() {
        // caution: "this" here won't be your object.
        // use option 3 below if you need this to be your object
    }
}

2.缓存对本地的引用this

var MyObj = function() {
    var that = this;
    window.onresize = function(event) {
        that.onBrowserResize();
    }

    this.onBrowserResize = function() {}
}

3. 固定thiswithFunction.prototype.bind的值:

var MyObj = function() {
    window.onresize = this.onBrowserResize.bind(this);

    this.onBrowserResize = function() {}
}
于 2012-12-05T12:00:00.917 回答
1
//Constructor Object
function MyObject(){

};

MyObject.prototype.onWindowResize = function(){
  this.onBrowserResize();
}

MyObject.prototype.onBrowserResize = function(){

}

   //Implementation
   var myObject = new MyObject();
   myObject.onWindowResize();
   myObject.onBrowserResize();
于 2012-12-05T11:43:18.593 回答