命名函数的this指向
时间: 2023-06-19 21:06:56 浏览: 65
在 JavaScript 中,函数的 this 指向取决于函数的调用方式。如果函数作为对象的方法调用,那么 this 指向该对象;如果函数直接调用,那么 this 指向全局对象(浏览器环境中为 window,Node.js 环境中为 global);如果使用 call、apply 或 bind 方法调用函数,则可以手动指定函数内部的 this 指向。
例如,以下代码中的函数 func1 和 func2 的 this 指向分别为 obj 和 window:
```
const obj = {
name: 'foo',
func1() {
console.log(this.name); // 输出 'foo'
}
};
function func2() {
console.log(this === window); // 输出 true
}
obj.func1();
func2();
```
在使用箭头函数时,函数的 this 指向是在定义时确定的,而不是在运行时确定的。箭头函数的 this 始终指向函数定义时的父级作用域的 this,与函数的调用方式无关。
例如,以下代码中的箭头函数 func3 的 this 指向为 obj:
```
const obj = {
name: 'foo',
func3: () => {
console.log(this.name); // 输出 'foo'
}
};
obj.func3();
```
相关问题
javascript箭头函数详解
箭头函数是ES6中新增的一种函数表达式,它的语法比传统的函数表达式更加简洁,可以让代码更加易读。箭头函数总是函数表达式,不存在箭头函数声明。箭头函数是匿名函数表达式,没有用于递归或者事件绑定/解绑定的命名引用。箭头函数内部的this绑定不是动态的,而是词法的,这意味着在箭头函数内部使用的this指向的是定义时所在的对象,而不是运行时所在的对象。箭头函数转变带来的可读性提升与被转化函数的长度负相关,这意味着箭头函数适用于简短的函数,但不适用于复杂的函数。
箭头函数的语法如下:
```
// 无参数
() => { statements }
// 一个参数
x => { statements }
// 多个参数
(x, y) => { statements }
```
箭头函数还有一些特殊的用法,例如可以用来简化数组的操作,如下所示:
```
var a = [1,2,3,4,5];
a = a.map( v => v * 2 );
console.log( a ); // [2,4,6,8,10]
```
js构造函数
JavaScript 中的构造函数是一种特殊类型的函数,它用于创建对象并初始化对象的属性。构造函数使用 `new` 关键字调用,创建一个新的对象,并将该对象作为函数的上下文(`this`)返回。
构造函数的命名约定是使用大写字母开头的驼峰命名法,以便将构造函数与普通函数区分开来。
以下是一个简单的构造函数示例:
```js
function Person(name, age) {
this.name = name;
this.age = age;
}
var john = new Person('John', 30);
console.log(john.name); // 输出 'John'
console.log(john.age); // 输出 30
```
在上面的示例中,构造函数 `Person` 接受两个参数 `name` 和 `age`,并将它们分别赋值给新创建的对象的属性。然后使用 `new` 关键字调用 `Person` 构造函数创建一个新的对象 `john`,并将其赋值给变量 `john`。最后,可以通过访问 `john` 对象的属性来检索 `name` 和 `age` 值。
需要注意的是,如果不使用 `new` 关键字调用构造函数,那么 `this` 将指向全局对象,而不是新创建的对象。因此,始终应该使用 `new` 关键字来调用构造函数。