在函数建立的时刻,函数内部自动获取到this
(另有一个arguments
)。this
援用的是函数功用据以实行的环境对象,因而this
的值与挪用函数的体式格局有着亲昵的关联。
作为函数挪用时,
this
指向window
。var name = 'window'; function sayName() { console.log(this.name); } sayName(); //window
作为对象的要领挪用时,
this
指向该对象。var obj = { name: 'object', sayName: function() { console.log(this.name); } }; obj.sayName(); //object (obj.sayName = obj.sayName)(); //window (obj.sayName, obj.sayName)(); //window
赋值语句和逗号运算符都邑返回背面变量的值,所今后二者相当于在全局中挪用了函数,
this
指向了window
。挪用组织函数
在挪用组织函数时返回this
,this
指向组织函数;建立的实例中,this
指向实例对象。function Person(n) { console.log(this); this.name = n; this.sayName = function() { return this.name; }; } var person = new Person('hiyohoo'); //Person{} console.log(person.sayName()); //hiyohoo
挪用函数时指定
this
。在挪用函数时假如运用函数要领call()
、apply()
、bind()
。则函数内部的this
指向要领指定的对象。而一旦被bind()
指定了this
值,以后不论以何种体式格局挪用函数,其this
值一直指向bind()
指定的对象环境。var outer = { name: 'outer', inner: { name: 'inner', t: function() { return this.name; } } }; console.log(outer.inner.t()); //inner console.log(outer.inner.t.bind(outer)()); //outer
闭包中的
this
。若闭包在全局作用域中挪用,则this
指向window
。这里我们用定时器做例子:var name = 'window'; var obj = { name: 'object', sayName: function() { setInterval(function() { console.log(this.name); }, 1000); } }; obj.sayName(); //window
作为
dom
绑定事宜的回调函数。this
指向这个dom
元素。
转载请说明出处:https://segmentfault.com/a/1190000004587440
文章不定期更新完美,假如能对你有一点点启示,我将不胜幸运。