前端面试题——15.谈谈你对this对象的理解

this有个原则,就是谁调用就指向谁。

一、全局环境:
全局环境就是在里面,指向的是window对象。
(怎么可以不举几个栗子呢)
前端面试题——15.谈谈你对this对象的理解_第1张图片
栗子1:

    var name = 'Jenny';

    function person() {
        return this.name;   
    }
    console.log(this.name);  // Jenny
    console.log(window.name);  // Jenny
    console.log(person());  // ③  // Jenny
     
// 这段代码里的两个this都是指向window。
// 因为name属于全局变量,全局变量属于window,所以this.name就是window.name
// 第三句当我要去输出person(),就全局寻找person(),window.person,即this.person(),
// return this.name就输出this.window.name

二、局部环境:

栗子2:

    var name = 'Jenny';
    
    function person() {
        console.log(this.name);
    }

    var obj = {
        name : 'Tom',
        person: function() {
            console.log(this.name);
        }
    }
    person();  // Jenny
    obj.person();  // Tom
    
//  这段代码最后两次调用person,第一个调用person是全局的person,所以跟栗子1一样的原理
//  调用obj的person的时候,对象obj先寻找自己的person方法,在person方法里,打印this.name。
//  因为这个person方法是被obj调用的,所以,this是指obj,就寻找obj内部的name,打印结果是Tom

如果此刻你的表情是这样的
前端面试题——15.谈谈你对this对象的理解_第2张图片
那我也就成功了

——————————————————华丽的分隔线————————————————————

栗子3:构造函数内使用this

    function Person(name) {
        this.name = name;
        return name;
    }
    console.log(new Person('jack').name);   // jack
    
//  new Person('jack')时生成一个实例(比如叫person,他的name叫jack),person调用name,即jack

栗子4:使用apply和call函数改变this的指向

    function person() {
        return this.name;
    }

    var obj = {
        name : 'jack'
    }
    console.log(person.call(obj));   // jack
    console.log(person.apply(obj));  // jack
    
//  需要把this指向谁就把谁写在参数第一个位置

你可能感兴趣的:(前端面试题,JS基础)