注意:该方法的语法和作用与 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)时就可以更灵活了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。