欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

this的指向问题

程序员文章站 2022-03-17 13:03:33
...

一、函数调用模式 :函数名()

this指向window

var num = 11
      function fn() {
        console.log(this.num)
      }

      fn();// 11   this指向window

二、方法调用模式:对象名.方法名()

this永远指向 当前对象

var age = 20
      var obj = {
        name: 'zs',
        age: 18,
        sayHi: function() {
          console.log(this.age)
        }
      }

      obj.sayHi();// 18   this指向obj

三、构造函数调用模式:new 函数名()

this指向新创建的对象

function Person(name, age){
        this.name = name;
        this.age = age;
      }

      var p = new Person('zs', 18);
      console.log(p.name);// zs  this指向p

四、上下文调用模式

call()与apply(): 都可以让函数执行, 第一个参数都是 this的指向

区别: call(this, 参数1, 参数2, 参数3)

apply(this, [参数1, 参数2, 参数3])

apply方法要求所有的参数都包含一个数组中

var obj = {
        0: 'zs',
        1: 'ls',
        length: 2
      }

      //;[].push.call(obj, '王五', '赵六')
      ;[].push.apply(obj, ['王五', '赵六'])
      console.log(obj)
// 求数组的最大值
      var arr = [100, 300, 200, 10]

      var result = Math.max.apply(null, arr)
      console.log(result);// 300

      // 需求:无论传递多少个参数, 需要把所有的参数用-拼接起来并且打印
      function log() {
        // console.log(arguments)
        console.log([].join.call(arguments, '-'));// join中的this指向arguments
      }

      log('张三', '李四', '王五');// 张三-李四-王五
      log(1, 2, 3);// 1-2-3