株洲网站制作建设,青海移动网站建设,营业执照名称查询系统,工程项目信息查询平台在JavaScript中#xff0c;this是一个特殊的关键字#xff0c;用于表示函数执行的上下文对象#xff0c;也就是当前函数被调用时所在的对象。由于JavaScript的函数调用方式多种多样#xff0c;this的指向也因此而变化。本文将介绍JavaScript中this的指向及绑定规则#xf…
在JavaScript中this是一个特殊的关键字用于表示函数执行的上下文对象也就是当前函数被调用时所在的对象。由于JavaScript的函数调用方式多种多样this的指向也因此而变化。本文将介绍JavaScript中this的指向及绑定规则包括默认绑定、隐式绑定、new绑定、显式绑定和箭头函数中的this规则。
1. 默认绑定
默认绑定指的是在独立函数调用的情况下this会指向全局对象浏览器环境下为window对象严格模式下为undefined。例如
function foo() {console.log(this);
}foo(); // 在浏览器环境下输出window对象在严格模式下输出undefined无论是多层调用只要是使用默认调用的方法this的指向都会是全局对象。
2. 隐式绑定
隐式绑定是指通过某个对象进行调用的情况下this会指向调用该函数的对象。例如
function foo() {console.log(this);
}var obj {name: sss,foo: foo
};obj.foo(); // this指向obj对象无论多少层调用只要调用的方法是通过某个对象发起的this都指向调用该函数的对象。
3. new绑定
在JavaScript中函数可以当作构造函数使用使用new关键字调用函数时会执行以下操作
创建一个全新的对象这个新对象会被执行prototype连接这个新对象会绑定到函数调用的this上this的绑定在这个步骤完成如果函数没有返回其他对象表达式会返回这个新对象。
例如
function Person(name) {console.log(this);this.name name;
}var p new Person(aaa);
console.log(p); // p为新创建的Person对象4. 显式绑定
如果不希望在对象内部包含函数的引用同时又希望在某个对象上进行强制调用可以使用call、apply、bind方法。
4.1 apply方法
apply方法用于绑定函数的this对象将this绑定到传入的对象上。该方法传入的参数是一个对象和一个参数数组。
function foo(name, age, height) {console.log(this);console.log(打印参数, name, age, height);
}var obj {name: zzz
};foo.apply(obj, [aaa, 30, 1.98]); // this指向obj对象4.2 call方法
call方法也用于绑定函数的this对象但是参数需要逐个传入。
function foo(name, age, height) {console.log(this);console.log(打印参数, name, age, height);
}var obj {name: zzz
};foo.call(obj, aaa, 30, 1.98); // this指向obj对象4.3 apply和call的第一个参数
apply和call的第一个参数是用来绑定this对象的可以是任意对象甚至是window、Number、String对象。
function foo(name, age, height) {console.log(this);
}var obj {name: zzz
};foo.apply(obj, aaa, 30, 1.98); // this指向obj对象
foo.call(window); // this指向window对象
foo.call(123); // this指向Number对象
foo.call(string); // this指向String对象4.4 bind方法
bind方法也用于绑定函数的this对象但不会立即执行函数而是返回一个新的函数。