关于 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,'叫')