JS中函数的上下文和上下文规则一、函数的上下文函数中可以使用this关键字,它表示函数的上下文函数中的this具体指代什......
二、上下文规则
- function fun() {
- console.log(this.a + this.b);
- }
- var obj = {
- a: 1,
- b: 2,
- c: [{
- a: 3,
- b: 4,
- c: fun
- }]
- };
- var a = 5;
- obj.c[0].c(); //构成对象.方法()的 形式,适用规则1 结果为7
- function fun() {
- return this.a + this.b;
- }
- var a = 1;
- var b = 2;
- var obj = {
- a: 3,
- b: fun(), //适用于规则2 window对象 3
- fun: fun
- };
- var result = obj.fun(); //适用于规则1 结果为6
- console.log(result);
- var arr = ['A', 'B', 'C', function () {
- console.log(this[0]);
- }];
- arr[3](); //A
- (function() {
- })();
- var a = 1;
- var obj = {
- a: 2,
- fun: (function () { //IIFE立即执行,返回内层函数
- var a = this.a; //适用规则4,this.a是window a属性即1
- return function () {
- console.log(a + this.a); //前面指闭包中的a值,即1,this.a是规则1中 2
- } //适用规则4
- })() //最后结果3
- };
- obj.fun() //适用规则1 即2
- var obj = {
- a: 1,
- b: 2,
- fun: function () {
- console.log(this.a + this.b);
- }
- }
- var a = 3;
- var b = 4;
- setTimeout(obj.fun, 2000); //适用规则五 7
- var obj = {
- a: 1,
- b: 2,
- fun: function () {
- console.log(this.a + this.b);
- }
- }
- var a = 3;
- var b = 4;
- setTimeout(function () { //延时器调用的是外层的匿名函数
- obj.fun(); //适用规则1 //真正调用函数的不再是延时器,而是obj.fun调用的。
- }, 2000);
- DOM元素."token operator">= function () { };
-
- 函数.call(上下文); //sum.call(xiaoming)
- 函数.apply(上下文); //sum.apply(xiaoming)
-
-
- function sum() {
- alert(this.chinese + this.math + this.english);
- }
- var xiaoming = {
- chinese: 80,
- math: 95,
- english: 93
- }
- sum.call(xiaoming)
- sum.apply(xiaoming)
-
-
- function sum(b1, b2) {
- alert(this.c + this.m + this.e + b1 + b2);
- }
- sum.call(xiaoming, 5, 3); //call要用逗号罗列参数
- sum.apply(xiaoming, [5, 3]); //apply要把参数写到数组中
- class Person {
- constructor(name, age){
- this.name = name;
- this.age = age;
- }
- }
- person = new Person("zs", 18);
- console.log(person) //{ name: 'zs', age: 18 }
-