js中this的理解

    this的指向在函数运行的时候才确定。有4种情况:普通的this、作为对象方法、apply调用,this同级中有返回值。(这里的this都不是在严格模式下讨论)

 

一、普通的this:指向调用这个函数的对象。

例子1:指向window


function MyObject(){
    console.log(this);
}

MyObject();//window

window.MyObject();//window

console.log(this);//window

        这里第一次调用的MyObject其实是window调用的,js可以省略window(如alert()就是)

例子2:指向调用的对象

function MyObject(){
    console.log(this);
}

var b = new MyObject();//MyObject

console.log(b instanceof MyObject);//true

new Myobject();//MyObject

        变量b是一个MyObject的对象,在new的过程中,创建了一个新对象,将构造函数的作用域赋值给新对象,执行构造函数中的代码,返回新对象。new可以改变this的指向,var b这里将this指向了b,无论有没有接收的对象这里都是新建立了一个MyObject对象。

例子3:

二、作为对象方法:指向调用对象的父级

例3:

function f1(){
    this.pro1 = '1';
    console.log(this.pro1);
    console.log(this);
}
var a = {};
a.pro = f1();//'1',window
a.proa = f1;
a.proa();//1,object(这里是a)

console.log(a.pro1);//1

        这里的this是调用它的对象(a.proa)的父级(a)。

三、apply调用:指向apply()括号里面的对象。

        首先说一下apply()的作用是改变调用函数的对象。

例4:

var x = 0;
function f1(){
    console.log(this.x);
}
var y = {};
y.x = 1;
y.pro = f1;
y.pro.apply();//0
y.pro.apply(window);//0,没有参数默认是window
y.pro.apply(y);//1

四、this同级中有返回值:若返回值是一个对象,this指向返回对象,若不是,则指向函数的实例。

例5:指向本身

function f2(){
    this.x = 1;
    return this;
}
var a = new f2();

console.log(a.x);//1

例6:this指向b

function f3(){
    this.x = 2;
    var b = {};
    b.x = 0;
    return b;
}
var c = f3();

console.log(c.x);//0

例7:this指向3

function f4(){
    this.x = 1;
    return 3;
}
var d = f4();

console.log(d.x);//undefined

例8:this指向null

function f5(){
    this.x = 1;
    return null;
}
var e = f5();
console.log(e.x);//Cannot read property 'x' of null

        若返回值是一个对象,this指向返回对象,若不是,则指向函数的实例。因为null也是对象,所以this指向null。

        

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值