var a = {b:function(){console.log(this)},c:console.log(this)};打印a.c
输出Window {external: Object, chrome: Object, document: document, document_saved: 0, GoogleAnalyticsObject: "ga"…}
还有
`var el = document.getElementById("outside");
el.addEventListener("click", function(){modifyText("four")}, false);`
和
``
这里面modifyText()中的this指向有什么异同?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
摘自:JavaScript秘密花园:this的工作原理
1.b方法中的
this要看你的调用方式,如果直接a.b(),这样的话this指向调用b的这个对象,也就是a,这属于方法调用;如果你通过var d = a.b; d(),这时this就指向window,这属于函数调用了,它的执行环境就是window,所以指向它。2.而c中的
this指向window,它的执行环境就是window,输出的window来自它;3.通过
addEventListener给元素绑定事件,this指向绑定这个事件的元素。对象所在的代码块并不创建作用域,因此this仍然在全局域中,故指的是windows对象。在js中,只有函数才能创建一个作用域,且在函数中通过var声明的变量才会限制在该作用域中。
javascript一共有4种调用方式,题主举的例子是使用方法调用模式,方法调用模式中的this被绑定到对象上。
详情可以参见JavaScript 中this在不同调用模式中的差异
addEventListener中事件函数的this指向