前端js -- this指向总结。

          面向对象编程 --- this指向

一。起首:,

this的指向在函数定义的时刻是肯定不了的,只要函数实行的时刻才肯定this究竟指向谁,实际上this的终究指向的是谁人挪用它的对象。

二。比方:

var obj = {
   a : 1,
   b : function() { 
       console.log(this.a) 
   }
}

obj.b()时,会输出1
var fun = obj.b; fun() 时,会输出undefined

三。缘由:
1.obj.b()这里的this指向的是对象o,由于你挪用这个fn是经由过程o.fn()实行的,那天然指向就是对象o
2.

var fun = obj.b;
fun();

相当于,

var b = function(){ 
   console.log(this.a)
};
obj = {
   a:1,
   b:b
};
var fun = obj.b;
fun();

虽然funobj.b的一个援用,然则实际上,他援用的是b函数自身,因而此时的fun()实际上是一个不带任何润饰的函数挪用,只是在将fn赋值给变量j的时刻并没有实行所以终究指向的是window

四。总结: this的值要比及代码真正实行是才肯定。
同时,this的值有以下几种状况:
1.new挪用时指的是被组织的对象。(

function Fn(){
   this.user = '猫咪'
}; 
var a = new Fn(); 
consle.log(a.user); //猫咪

这里之所以对象a能够点出函数Fn内里的user是由于new关键字能够转变this的指向,将这个this指向对象a,为何我说a是对象,由于用了new关键字就是建立一个对象实例,我们这里用变量a建立了一个Fn的实例[相当于复制了一份Fn到对象a内里],此时仅仅只是建立,并没有实行,而挪用这个函数Fn的是对象a,那末this指向的天然是对象a,那末为何对象a中会有user,由于你已复制了一份Fn函数到对象a中,用了new关键字就等同于复制了一份。)
2.callapply挪用,只想我们指定的对象(后续更新)。
3.对象挪用,如实行obj.b()this指向obj
4.默许的,指向全局变量window

特别:组织函数版this, 当this遇到return时。

  1. 举例:

(1).

function fn()  { 
     this.user = '金毛'; 
     return {};
 }; 
 var a = new fn;  
 console.log(a.user); //undefined

(2).

function fn()  {   
    this.user = '金毛';    
    return function(){};
}; 
var a = new fn;  
console.log(a.user); //undefined 

(3).

function fn()  {  
    this.user = '金毛';   
    return 1;
}; 
var a = new fn;  
console.log(a.user); //金毛

(4).

function fn()  {  
    this.user = '金毛';  
    return undefined;
}; 
var a = new fn;  
console.log(a.user); //金毛

2.总结:假如返回值是一个对象,那末this指向的就是谁人返回的对象,假如返回值不是一个对象那末this照样指向函数的实例。

3.特别:虽然null也是对象,然则在这里this照样指向谁人函数的实例,由于null比较特别。

function fn()  {  
    this.user = '金毛';  
    return null;
}; 
var a = new fn;   
console.log(a.user); //金毛
    原文作者:金钟罩铁布衫
    原文地址: https://segmentfault.com/a/1190000014213089
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞