小学生都能理解的原生js——call

关于 js 作用域和执行上下文就不过多介绍了,本人也是在网上搜集了各种教程才逐渐理解,以下简单理解并说下call 的作用

首先简单理解下执行上下文有关概念,this 的指向就代表当前执行环境的上下文

function Person(name){
    this.name = name,
    this.speak = function(){
        console.log('my name is ' + this.name)
    }
}
var p = new Person('张三');
p.speak()

这里的this 就指new出来的对象,调用这个方法的对象

call 简单的来说是改变this的执行上下文环境,改变this 的指向对象,把之前指向 pet 的this 指向了dog对象,所以this 的words属性 变成了dog 对象的属性。后面跟着的参数是执行函数的参数列表,apply 用法相同,后面的参数是参数数组

var pet = {
    words:'hello',
    speak:function(say){
        console.log(say + ' ' + this.words)
    }
}

var dog = {
    words:'wang'
}

pet.speak('说话')

pet.speak.call(dog,'叫')
原文地址:https://www.cnblogs.com/inzaghihao/p/8386186.html