this指向之普通函数function中用
对象中的this
this指向只和调用函数的对象有关
多层嵌套的对象,内部方法的this指向离被调用函数最近的对象
多层函数嵌套的函数中this
多层函数嵌套的函数中的this指向,必须要看 该 函数有没有归属于某个对象,而不是归属于某个函数,也不需要看上一层函数所属对象,若没有指定对象,则归属于window
有对象包裹的多层函数嵌套中this
多层函数嵌套的函数中的this指向,必须要看 该 函数有没有归属于某个对象,而不是归属于某个函数,也不需要看上一层函数所属对象,若没有指定对象,则归属于window, 例子如下
function a() {
function b(){
console.log(this)
}
b();
console.log(this)
}
var c = {'d' : 1}
a.call(c) // window // c
a() // window // window
什么才是给函数指定了所属对象????
(优先级最高)new 构造函数也会改变this指向,把this赋值给新对象
(优先级第二)call,apply,bind等方法指定this对象
函数成为了对象中属性的值, 如下
var d = {
a:function a() {
console.log(this)
}
}
d.a() //{a:f}
this指向之箭头函数中用
箭头函数不绑定this,也就是根本没有this
不能用call/apply等方法修改里面的this
箭头函数中this的值和外层的this是一样的
setTimeout & setInterval中this
当延时函数中的函数是箭头函数
按照箭头函数来定this指向
当延时函数中的函数是普通函数
this指向全局对象window(当然我们可以通过bind方法改变其内部函数的this指向)
改变this指向
call()apply()…
原型中的this
原型中this指向是谁调用指向谁(不就是找所属对象吗??? so esay)
最重要的一种情况 隐式赋值改变this指向
当把函数名赋值给一个变量的时候,很可能会改变this指向,例子
function foo() { console.log( this.a ); }
var obj = { a: 2, foo: foo };
var bar = obj.foo; // 函数别名!(这里发生了隐式this改变)
var a = "oops, global"; // a 是全局对象的属性 bar(); // "oops, global"