Javascript this指针

Javascript中的this指针用于指示当前执行的代码所属的对象。在不同的情况下,this指向的对象是不同的,因此在使用this时需要谨慎处理。下面将详细介绍Javascript this指针的相关知识和使用技巧。

Javascript中的this指针用于指示当前执行的代码所属的对象。在不同的情况下,this指向的对象是不同的,因此在使用this时需要谨慎处理。下面将详细介绍Javascript this指针的相关知识和使用技巧。

什么是this指针?

在Javascript中,this指针是一个关键字,用于指示当前执行的代码所属的对象。this关键字可以在任何函数中使用,包括全局作用域、函数内部作用域和对象作用域。this指针的值在运行时确定,并根据不同的调用方式和执行环境进行动态绑定。

如何使用this指针?

下面将根据不同场景介绍如何正确使用this指针。

1.全局作用域中的this指针

在全局作用域中,this指向的是全局对象。在浏览器中,全局对象是window对象。

console.log(this === window); // true

2.函数作用域中的this指针

在函数作用域中,this指向的是调用此函数的对象。如果函数不是作为对象的方法调用的,则this指向的是全局对象。

function foo() {
    console.log(this);
}
foo(); // this指向的是全局对象

var obj = {
    name: 'Jack',
    sayHello: function() {
        console.log(this.name);
    }
};
obj.sayHello(); // this指向的是obj对象

3.构造函数中的this指针

在构造函数中,this指向将要被创建的实例对象。

function Person(name, age) {
    this.name = name;
    this.age = age;
}
var person = new Person('Jack', 18); // this指向的是person对象
console.log(person.name); // Jack

4. apply、call和bind方法中的this指针

apply、call和bind方法可以修改函数内部的this指向。其中,apply和call方法在调用函数时将this指向作为第一个参数传入,bind方法在创建绑定函数时指定this指向。

var obj1 = {
    name: 'Jack'
};
var obj2 = {
    name: 'Lucy'
};
function sayName() {
    console.log(this.name);
}
sayName.apply(obj1); // this指向的是obj1对象
sayName.call(obj2); // this指向的是obj2对象
var say = sayName.bind(obj1);
say(); // this指向的是obj1对象

this指针的注意事项

在使用this指针时需要注意以下几点:

1.this指针的值在运行时确定,根据不同的调用方式和执行环境进行动态绑定。
2.直接调用函数时,即没有明确绑定this指向时,this指向的是全局对象。
3.作为事件处理函数时,this指向的是触发事件的元素。
4.箭头函数中的this指向与外部函数相同,与执行环境无关。
5.使用apply、call和bind方法可以修改函数内部的this指向。

示例说明

下面通过两个示例来说明this指针的使用。

示例1:计算器对象

var calculator = {
    result: 0,
    add: function(num) {
        this.result += num;
        return this;
    },
    subtract: function(num) {
        this.result -= num;
        return this;
    },
    multiply: function(num) {
        this.result *= num;
        return this;
    },
    divide: function(num) {
        this.result /= num;
        return this;
    }
};
calculator.add(10).subtract(5).multiply(2).divide(1).result; // 10

在上面的示例中,this指向的是调用函数的对象,即计算器对象。每一个函数都返回this,可以实现链式调用。

示例2:计时器

function Timer() {
    var self = this;
    this.time = 0;
    setInterval(function() {
        self.time++;
        console.log(self.time);
    }, 1000);
}
var timer = new Timer();

在上面的示例中,使用self变量保存了this指向的对象,并在setInterval函数内部使用self变量代替this,以保证在定时器内部this指向的是计时器对象。

本文标题为:Javascript this指针

基础教程推荐