假设您有以下代码:
function name() {
$(this).css('background', 'red');
}
$('selector1').click(name);
$('selector2').click(function () {
name.call($(this).parent());
});
Run Code Online (Sandbox Code Playgroud)
现在,当通过单击'selector1'调用该函数时,this是一个HTML对象和$(this)一个jQuery对象,但如果通过单击'selector2'调用该函数this已经是一个jQuery对象,那么它是$(this)什么?
我知道我可以做这样的事情name.call($(this).parent()[0]);得到一个HTML对象,但我的问题是,当你做这样的事情会发生什么$($(this))或$($('selector'))?结果是什么,最显着的是,使用这种结构有什么危害?
" this关键字始终引用包含函数的方法的对象."
很棒,听起来很简单,但这就是我想知道的......
例如:
function func1() {
function func2() {
alert(this == window); // true
}
func2();
alert(this == window); // true
}
func1.func3 = function () {
alert(this == window); // false
alert(this == func1); // true
};
func1();
func1.func3();
Run Code Online (Sandbox Code Playgroud)
现在,因为func1实际上是global(window)对象(分配给全局对象的属性func1的函数对象)的方法,所以内部引用全局对象是有道理的,并且因为它是函数对象的方法,所以它是有意义的该内指的功能对象.thisfunc1func3func1thisfunc3func1
困扰我的是func2.我知道this嵌套函数内部也应该引用全局对象,但我不确定为什么因为func2它不是全局对象的方法.据我所知(这是我可能完全错误的部分)func2是一个func1调用(激活/变量)对象的方法.现在,如果我对此是对的(并且我不确定我是)那么不应该this在内部func2 …