apply,call,bind,symbol的用法
时间: 2023-07-29 15:12:04 浏览: 99
apply,call和bind都是用来改变函数执行上下文(即this指向)的方法。
其中,apply和call的用法类似,只是传参方式不同。apply接受一个数组作为参数,而call则是多个参数依次传递。例如:
```javascript
function greeting(name) {
console.log(`Hello, ${name}! I'm ${this.name}.`);
}
const person1 = { name: 'Alice' };
const person2 = { name: 'Bob' };
greeting.call(person1, 'John'); // 输出:Hello, John! I'm Alice.
greeting.apply(person2, ['Mary']); // 输出:Hello, Mary! I'm Bob.
```
bind则是返回一个新函数,修改了原函数的this指向,并且可以预设一些参数。例如:
```javascript
function sum(a, b, c) {
return a + b + c + this.num;
}
const obj = { num: 10 };
const add = sum.bind(obj, 1, 2);
console.log(add(3)); // 输出:16
```
Symbol是ES6新增的一种基本数据类型,用于生成唯一的、不可变的值,常用于对象属性名、枚举值等场景。例如:
```javascript
const sym = Symbol('my symbol');
console.log(sym); // 输出:Symbol(my symbol)
```
可以使用Symbol.for方法创建全局共享的Symbol值:
```javascript
const sym1 = Symbol.for('my symbol');
const sym2 = Symbol.for('my symbol');
console.log(sym1 === sym2); // 输出:true
```
阅读全文