javascript中未调用构造函数时的绑定
此代码是javascript中构造函数函数体的一部分:javascript中未调用构造函数时的绑定,javascript,prototype,this,Javascript,Prototype,This,此代码是javascript中构造函数函数体的一部分: window.addEventListener("load", function(){ this._updateFilter(); }.bind(this)); \u updateFilter方法属于该构造函数的原型对象: Constructor.prototype._updateFilter = function(){ // some code }; 我对在创建构造函数的新实例之前调用\u updateFilter感
window.addEventListener("load", function(){
this._updateFilter();
}.bind(this));
\u updateFilter方法属于该构造函数的原型对象:
Constructor.prototype._updateFilter = function(){
// some code
};
我对在创建构造函数的新实例之前调用\u updateFilter感到困惑。因此,没有:
var obj = new Constructor();
但是\u updateFilter是在加载时调用的吗?有人能解释一下吗
谢谢你,因为监听器回调,甚至构造函数本身的定义并不意味着它在被定义时被调用。实际上,构造函数只是一个函数。与任何函数声明一样,它定义了调用时将发生什么。如果我们不调用它,什么也不会发生。对于构造函数,当我们创建它的新实例时会调用它。最终,您的应用程序将调用构造函数,此时将发生以下情况:
new
关键字,我们告诉JavaScript解释器调用构造函数,并在其中提供一个新对象设置为该新对象在内存中的引用
窗口上创建一个事件侦听器。我们向侦听器传递一个回调函数,它是this
对象的闭包,使当前的this
引用可用。但该回调尚未执行,并且在窗口的load
事件触发之前不会执行
这个
在当时存在,并且实际上已经从构造函数.prototype
继承,它也没有这样的方法\u updateFilter
。然后,解释器将检查原型链,并查看Constructor.prototype
上也没有这样的函数。它将继续沿着链向上,找不到函数,并将抛出一个错误。但请记住,回调尚未启动\u updateFilter
扩展构造函数的原型
load
事件确实会触发,并真正调用回调。解释器检查\u updateFilter
是否存在于上,检查它是否存在,然后检查其原型链。现在,它发现函数确实存在于构造函数.prototype上,并运行该代码
仅仅因为定义了侦听器回调,甚至构造函数本身,并不意味着它在定义时被调用。实际上,构造函数只是一个函数。与任何函数声明一样,它定义了调用时将发生什么。如果我们不调用它,什么也不会发生。对于构造函数,当我们创建它的新实例时会调用它。最终,您的应用程序将调用构造函数,此时将发生以下情况:
new
关键字,我们告诉JavaScript解释器调用构造函数,并在其中提供一个新对象设置为该新对象在内存中的引用
窗口上创建一个事件侦听器。我们向侦听器传递一个回调函数,它是this
对象的闭包,使当前的this
引用可用。但该回调尚未执行,并且在窗口的load
事件触发之前不会执行
这个
在当时存在,并且实际上已经从构造函数.prototype
继承,它也没有这样的方法\u updateFilter
。然后,解释器将检查原型链,并查看Constructor.prototype
上也没有这样的函数。它将继续沿着链向上,找不到函数,并将抛出一个错误。但请记住,回调尚未启动\u updateFilter
扩展构造函数的原型
load
事件确实会触发,并真正调用回调。解释器检查\u updateFilter
是否存在于上,检查它是否存在,然后检查其原型链。现在,它发现函数确实存在于构造函数.prototype上,并运行该代码
您提供的代码在创建实例之前确实不会调用
\u updateFilter
。请向我们展示整个代码或提供一个示例来演示这种奇怪的行为。您应该将代码片段简化为window.addEventListener(“加载”,this.\u updateFilter.bind(this))
您是对的,对不起。此方法在创建实例后调用。此代码段是todomvc项目中vanillsjs示例的一部分。您提供的代码在创建实例之前确实不会调用\u updateFilter
。请向我们展示整个代码或提供一个示例来演示这种奇怪的行为。您应该将代码片段简化为window.addEventListener(“加载”,this.\u updateFilter.bind(this))
您是对的,对不起。此方法在创建实例后调用。这段代码是来自todomvc项目的vanillsjs示例的一部分。