通常在一些jQuery代码中,我看到{j}中的this
已分配给变量,我不明白这种方法的原因?
这是一个jQuery插件构造函数的示例:
//constructor
function Nullpoll(element, options){
var widget = this;
widget.config = $.extend({}, defaults, options);
widget.element = element;
widget.element.on( "click", function() {
alert("Test")
});
widget.element.one("change", function(e){
widget.element.find("button").removeProp("disabled");
});
this.init();
}
答案 0 :(得分:1)
http://learn.jquery.com/javascript-101/this-keyword/
在JavaScript中,与大多数面向对象的编程语言一样,this
是一个特殊的关键字,在方法中用于引用调用方法的对象。使用一系列简单步骤确定其值:
Function.call()
或Function.apply()
调用该函数,则this
将设置为传递给.call()
/ .apply()
的第一个参数。如果传递给.call()
/ .apply()
的第一个参数是null
或undefined
,this
将引用全局对象(window
Web浏览器中的对象)。Function.bind()
创建的,this
将是在创建函数时传递给.bind()
的第一个参数。this
将引用该对象。this
将引用全局对象。答案 1 :(得分:1)
this
的值取决于它出现的函数的调用方式。
您可以将其分配给另一个变量:
在这种特殊情况下,传递给widget.element.one()
的匿名函数使用this
调用中Nullpoll
的值。如果它尝试使用this
关键字,它将获得不同的值(该值取决于one
函数如何称为匿名函数)
答案 2 :(得分:1)
在范围内使用内联回调时(例如示例中的事件处理程序),回调中的this
值通常与父范围不同。因此,如果要从这些回调中访问父作用域中this
的值,则将其保存到父作用域中的局部变量是一种常见的设计模式。然后,在回调中,您仍然可以从父作用域引用该值,即使this
在回调中可能具有不同的值。
作为次要优势,一些最小化器可以通过使用局部变量而不是this
来生成更小的代码,因为局部变量可以通过最小化器重命名为单个字符变量,但this
不能重命名。
这里有一堆答案的类似问题:What is the value of var me = this;
答案 3 :(得分:-1)
this
指向页面上正在调用特定方法的元素!