jQuery Resize 会丢失“this”引用
jquery resize loses 'this' reference
假设包含jquery:
function FixedPoint(bgWidth) {
this.bgWidth= bgWidth;
this.plot();
$(window).resize(this.plot);
}
FixedPoint.prototype.plot = function() {
console.log(this.bgWidth); //This is undefined when called by resize
}
var pt1 = new FixedPoint(1920);
当在构造函数中或初始化后调用 plot() 时一切正常,但是当 plot() 被 resize 函数调用时,它不能再通过"this"访问实例变量。
我可以调用构造函数的 resize 来解决这个问题,但希望将其放在类中以保持整洁。
$(window).resize(this.plot);
从window
上下文中调用的方法this.plot
。所以这是预期的行为。 this
将指向窗口对象而不是FixedPoint
。您可以使用 Ecmascript5 function.bind 显式绑定上下文。
$(window).resize(this.plot.bind(this));
使用 jquery,您可以使用 $.proxy 来做同样的事情。
为了提供更多见解,this
上下文是根据调用方法的位置设置的(绑定函数除外)。在这里,这将从窗口对象的resize
方法中调用,其中this
引用窗口。
另一种黑客方法是使用匿名回调函数并使用缓存的此变量。
function FixedPoint(bgWidth) {
this.bgWidth = bgWidth;
var self = this; //cache it here
$(window).resize(function () {
self.plot(); //invoke with self.
});
}
相关文章:
- jQuery$(this)引用未定义
- Javascript对象文字,如何使用“this”来引用对象中的变量
- 为什么当我尝试将函数绑定到自身时,“this”对象仍然引用窗口
- 为什么“exports”在nodejs模块中引用与“this”相同的对象
- React如何调用ES6类的呈现函数,使“this”不引用类本身
- 在 javascript 中将“this”引用传递给方法的提示
- 如何避免“this”引用 DOM 元素,并引用对象
- 主干:在回调中维护对模型的“this”引用的最简单方法
- jQuery Resize 会丢失“this”引用
- 将“this”引用到自定义变量
- 如何使“this”引用成员函数而不是其所有者类的实例
- Google Geocoder 和 TypeScript 中的“this”引用
- Javascript“this”-引用包含对象
- 我以为我有一个this引用传递到Javascript闭包中的私有函数,我想错了
- 我怎样才能确保'this'引用对象文字中的对象文字
- Ajax.BeginForm JavaScript回调参数导致$(this)引用窗口而不是窗体
- 如何防止方法's ' this '引用调用它的对象
- 有没有可能保护'this'引用绑定对象内的函数
- “this”引用在nodeJs中不起作用
- JavaScript 'this' 引用了错误的范围