this 是 JavaScript 语言的一个关键字。它是函数运行时,在函数体内部自动生成的一个对象,只能在函数体内部使用。
function test() { this.x = 1;}
在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。
var obj = { parent:'男'};var parent = '28';function child(obj){ console.log(this.parent);}child(); // 28 child.call(obj); //男child.apply(obj); //男
function f(){ return this.a;}var g = f.bind({a:"js"});console.log(g()); // jsvar h = g.bind({a:'html'}); // this已经被绑定bind的第一个参数,不会重复绑定,输出的值还是jsconsole.log(h()); // jsvar o = {a:css, f:f, g:g, h:h};console.log(o.f(), o.g(), o.h()); // css, js, js
var objProject = this;var foo = (() => this);console.log(foo()); // windowconsole.log(objProject); // windowconsole.log(foo() === objProject ); // true// 作为对象的一个方法调用var obj = {foo: foo};console.log(obj.foo() === objProject ); // true// 尝试使用call来设定thisconsole.log(foo.call(obj) === objProject ); // true// 尝试使用bind来设定thisfoo = foo.bind(obj);console.log(foo() === objProject ); // true
var obj = { a: 37, fn: function() { return this.a; }};console.log(obj.fn()); // 37
function C(){ this.a = 37;}var o = new C();console.log(o.a); // 37function C2(){ this.a = 37; return {a:38};}o = new C2();console.log(o.a); // 38,手动设置了返回对象
// 被调用时,将关联的元素变成蓝色function bluify(e){ console.log(this === e.currentTarget); // 总是 true // 当 currentTarget 和 target 是同一个对象时为 true console.log(this === e.target); this.style.backgroundColor = '#A5D9F3';} // 获取文档中的所有元素的列表 var elements = document.getElementsByTagName('*'); // 将bluify作为元素的点击监听函数,当元素被点击时,就会变成蓝色 for(var i=0 ; i<elements.length ; i++){ elements[i].addEventListener('click', bluify, false);}