Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 在window.onresize中调用函数。(范围)_Javascript_Oop - Fatal编程技术网

Javascript 在window.onresize中调用函数。(范围)

Javascript 在window.onresize中调用函数。(范围),javascript,oop,Javascript,Oop,我有一个构造函数对象。在这个构造函数中,我有两个函数。一个称为窗口。onresize,另一个称为onBrowserResize。现在,我想在窗口内调用onBrowserResize。onresize函数。我该怎么做 function MyObject() { window.onresize = function(event) { this.onBrowserResize(); } this.onBrowserResize = function() {

我有一个构造函数对象。在这个构造函数中,我有两个函数。一个称为窗口。onresize,另一个称为onBrowserResize。现在,我想在窗口内调用onBrowserResize。onresize函数。我该怎么做

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

    this.onBrowserResize = function() {
    }
}
我希望函数为public,这样我就可以这样调用它:
object.onBrowserResize()

如果我将函数设置为私有函数:
var onbrowserexize=function()
,则无法在范围之外访问它


有人知道怎么做吗?我可能只是对对象中的作用域有点困惑。

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

//Constructor Object
function MyObject(){

};

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

MyObject.prototype.onBrowserResize = function(){

}

   //Implementation
   var myObject = new MyObject();
   myObject.onWindowResize();
   myObject.onBrowserResize();
你的问题缺少一些细节。我的答案是假设你有这样的东西:

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

    this.onBrowserResize = function() {}
}
var myObj = new MyObj();
例如:

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

    this.onBrowserResize = function() {}
}
var myObj = new MyObj();
以下是实现这一目标的一些方法

1。只需将此.onBrowserResize作为事件处理程序传递即可(如果onresize处理程序只调用
onBrowserResize
,那么最简单的方法就是:

2。缓存对本地
的引用此

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

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

    this.onBrowserResize = function() {}
}
3。用固定此
的值:

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

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

    this.onBrowserResize = function() {}
}

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

你的问题缺少一些细节。我的答案是假设你有这样的东西:

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

    this.onBrowserResize = function() {}
}
var myObj = new MyObj();
例如:

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

    this.onBrowserResize = function() {}
}
var myObj = new MyObj();
以下是实现这一目标的一些方法

1。只需将此.onBrowserResize作为事件处理程序传递即可(如果onresize处理程序只调用
onBrowserResize
,那么最简单的方法就是:

2。缓存对本地
的引用此

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

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

    this.onBrowserResize = function() {}
}
3。用固定此
的值:

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

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

    this.onBrowserResize = function() {}
}

谢谢,但我指的是window.onresize函数不是onWindowResize。谢谢,但我指的是window.onresize函数不是onWindowResize。谢谢,我使用了选项二,因为我认为它看起来最干净。这是人们经常遇到的问题吗?是的,这是很常见的,因为在js中,
this
的行为方式。如果你习惯了传统的基于类的语言,这有点奇怪,但是你已经习惯了。。。如果您使用选项#3,您将不会有任何惊喜(即,
onBrowserResize
将是您的对象,而不是
窗口
中的其他两个选项)。谢谢,我使用了选项二,因为我认为它看起来最干净。这是人们经常遇到的问题吗?是的,这是很常见的,因为在js中,
this
的行为方式。如果你习惯了传统的基于类的语言,这有点奇怪,但是你已经习惯了。。。如果您使用选项#3,您将不会有任何惊喜(即,
onBrowserResize
将是您的对象,而不是
窗口
中的其他两个选项)。@Magus窗口是浏览器窗口,因此不是我编造的变量。所以当我进入window函数时,它将引用window而不是我的对象。@Magus window是浏览器窗口,所以不是我编的变量。因此,当我进入窗口函数时,它将引用窗口而不是我的对象。