A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 AngularBaby 于 2017-12-21 18:46 编辑

1. 直接调用模式
[JavaScript] 纯文本查看 复制代码
var foo = function(){
    console.log(this)
};
// 如果一个函数,是直接调用,与任何对象都没有关系时,这个调用,就是函数调用
// 函数调用模式中:this指的就是window
foo();  //  window


2. 方法调用模式(对象内部)
[JavaScript] 纯文本查看 复制代码
var obj = {
    foo:function(){            console.log(this)
        }
}
// 如果一个函数,是作为某个对象一个方法调用的(与某象相关联),那么这种调用,就属于方法调用
// 方法调用模式中:this就指向了当前调用的对象
obj.foo();  // obj


3. 构造函数调用模式
[JavaScript] 纯文本查看 复制代码
var Person = function(){
    this.foo = function(){
         console.log(this);
     }
};
// 如果一个函数是配合new运算符,来使用的,那么该种就属于,构造函数调用
// 构造函数调用模式中:this指向new创建出来的新对象
var p = new Person();
p.foo();    // p


4. 上下文调用模式,也称借用方法
[JavaScript] 纯文本查看 复制代码
call/apply/bind 可以动态改变this的指向


var x = 100;
function fun(){
    console.log(this.x);
}
var obj = {};
obj.x = 200;
obj.fun = fun;

// 上下文调用模式中:this指向第一个参数,如果为空指向window
obj.fun.apply();         // 100    100是window中的x,说明this指向window

obj.fun.apply(obj);    // 200    200是obj中的x,说明this指向的是obj对象



5. this的问题的总结
遇到this指向问题时,先看有没有call、apply、bind
如果有,那么this指向 call、apply、bind 中第一个参数
如果没有,分析this所处的函数,究竟属于那种函数:
    1. 普通函数:this指向 window
    2. 对象内部方法: this指向对象
    3. 构造函数:this指向该构造函数实例出来的新对象


点击查看更多精彩前端资源




1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马