注意:该方法的语法和作用与 apply() 方法类似,只有一个区别,就是 call() 方法接受的是一个参数列表,而 apply() 方法接受的是一个包含多个参数的数组。

先引用一句基本都会引用的句子,但本次并不是介绍两个方法的区别,而是尝试在vue中进行使用。
在vue中会有实例的this,通常在一个vue中我们会大量使用this,但如果我们把方法进行拆分成独立js后,能不能更简单方便的在独立js中使用this呢?

vue本身提供了一个mixins 方法,可以将独立出来的js混入到vue实例中,只要再vue中进行import 再声明mixins,就可以按照vue中的写法随心所欲的使用js了。
mixins参考vue官方api

也许我们还会有另一种不想混入的用法(仔细想想呢,其实大多数场景是可以用mixins包含的,只是复习javascript时又看到了call(),再进行一个深层的试想 ^__^)

call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。

一、应用在普通 js 中
下面看两个例子:

 1. 使用 let 声明变量,在function 中使用this
function foo() {    setTimeout(() => {      console.log('id:', this.id);    }, 100);  }let id = 21;foo.call({id:42});foo.call(this);foo();// id: 42// id: undefined// id: undefined
2. 将变量id 绑定在全局上(也有例子是 window.id)
function foo() {    setTimeout(() => {      console.log('id:', this.id);    }, 100);  }this.id = 21;foo.call({id:42});foo.call(this);foo();// id: 42// id: 21// id: undefined

目测js中可以通过call 进行this 传递。

二、应用在 vue 中

在vue 实例中的data 中定义了一个变量aaa,在created 中打印出来;同时调用t1中的方法。
test.vue

<template>    <div>测试call</div></template><script>    import t1 from './t1';    export default {        name: 'testThis',        data() {            return {                aaa:'aaa'            }        },        created() {            t1.call(this);            console.log(this.aaa);        }    }</script>

在t1.js 中直接使用this
t1.js

export default function test() {    console.log(this.aaa,'test');}


实践证明也是可以打印出来的。

所以我们在写一些独立js 文件,需要传递this 时,一定要清楚传的哪个this ,这样在写(ban)代(zhuan)码(tou)时就可以更灵活了。

附:MDN对call的介绍