this:执行上下文,this一般存在于函数中,表示当前函数的执行上下文,如果函数没有执行,那么this没有内容,只有函数在执行后this才有绑定
1.默认执行:fn(): 全局作用域或者普通函数中this指向window,严格模式指向undefined
例子: function fn(){
"use strict"
console.log(this)
}
fn()
2.通过对象执行(通过上下文对象执行,隐式执行)
function fn(){
console.log(this)
}
var a = 10;
var obj = {
a:20,
b:fn
}
obj.b();
var obj2 = {
a:30,
b:obj.b
}
3.显式执行(通过函数的方法bind执行):指定的是谁,就是谁
function fn(){
console.log(this)
}
var f = fn.bind(123);
f();
找回隐式丢失的this,其实就是使用显式执行,强行绑定
setTimeout(obj.b.bind(obj), 3000);
谁执行了this所在的函数,this就是谁
场景:
1.默认执行:非严格模式下指向window
window || undefined
2.隐式执行:通过任意对象执行
直接的执行对象
3.显式执行:通过函数的bind或call或apply执行
写谁就谁
function fn(){
console.log(this)
}
var obj = {}
obj.fn = fn;
obj.fn(); //obj
var obtn = document.getElementById("btn");
obtn.onclick = fn;
点击时 //obtn
fn.bind("hello")(); //"hello"
var f = fn.bind(obj);
f(); //obj
fn(); //window
4.构造函数执行(通过new执行)
来源:https://www.cnblogs.com/wss521/p/11439163.html