javascript方法中this的指向问题。

  1. 在Javascript中,this关键字永远都指向函数(方法)的所有者。

  2. 如果没有进行特定的所有者,那么this指向window。

我的疑问是这两句话是否正确,能否提供示例说明这两句话不正确。

我觉得是对的,因为我见了很多例题,都能用上面的两句话说通。
但是有部分同学说上面的话是片面的,所以我想求证一下。

阅读 3.1k
3 个回答

func.apply() 或者
func.call()
将会更改函数中this关键字的指向

js中this永远指向调用者,谁调用该函数,this就指向谁
//创建dog对象
var dog={name:'dog'};
//dog的walk方法
dog.walk=function(){

//这里的this也是指向调用者
console.log(this);
function a(){
    //这里的this指向调用者
    console.log(this);
};
//因为这里没有指定调用者,所以就隐式指定调用者为window对象
a();

};
//调用dog的walk方法
dog.walk();
这里dog.walk()中的this就指向dog对象
一般一个函数创建时都会附加给某个对象(也就是指定了函数的所有者),而没有指定调用者的情况下,该函数的调用者就为默认的window对象,同时可以通过function.call()与function.apply()来改变this的指向
对于上面的,可以这样
dog.walk.call(window);或者dog.walk.apply(window);来改变调用者为window
通过call()调用函数的语法格式为:
函数引用.call(调用者,参数1,参数2…)
通过apply()调用函数的语法格式为:
函数引用.apply(调用者,[参数1,参数2...]);

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题