javascript this

Posted 吴盼盼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript this相关的知识,希望对你有一定的参考价值。

最近看了很多人的微博,主要是“追梦子”的微博,总结了一下。希望大家多多指点。

1. 没有new this的指向问题
 
this的指向在函数创建的时候是决定不了的,在调用的时候才能决定,谁调用的就指向谁
因为this只会指向它的上一级对象
例一:
function a(){
    var user = "追梦子";
    console.log(this.user); //undefined
    console.log(this); //Window
}
a();  // === window.a()
   var o = {
     user:"追梦子",
      fn:function(){
          console.log(this.user);  //追梦子
     console.log(this);  // Object{...}
      }
  }
  o.fn(); // ===window.o.fn()
 
特殊情况:
var o = {
    a:10,
    b:{
        a:12,
        fn:function(){
            console.log(this.a); //undefined
            console.log(this); //window
        }
    }
}
var j = o.b.fn;       //j并没有被调用
j();                 // === window.j()
2. new 构造方法
function Fn(){
    this.user = "追梦子";
}
var a = new Fn();
console.log(a.user); //追梦子
用了new关键字就是创建一个对象实例,我们这里用变量a创建了一个Fn的实例(相当于复制了一份Fn到对象a里面),
此时仅仅只是创建,并没有执行,而调用这个函数Fn的是对象a,那么this指向的自然是对象a
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

this 与return     如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例

function fn()  
{  
    this.user = ‘追梦子‘;  
    return {};  
}
var a = new fn;  
console.log(a.user); //undefined
function fn()  
{  
    this.user = ‘追梦子‘;  
    return function(){};
}
var a = new fn;  
console.log(a.user); //undefined
function fn()  
{  
    this.user = ‘追梦子‘;  
    return 1;
}
var a = new fn;  
console.log(a.user); //追梦子
function fn()  
{  
    this.user = ‘追梦子‘;  
    return undefined;//return null
}
var a = new fn;  
console.log(a); //fn {user: "追梦子"}

 

 

 

 

 

在浏览器中setTimeout、setInterval和匿名函数执行时的当前对象是全局对象window
 
apply用于改变函数执行时的当前对象,当无参数时,当前对象为window,有参数时当前对象为该参数
var name = "window";
    
var someone = {
    name: "Bob",
    showName: function(){
        alert(this.name);
    }
};

var other = {
    name: "Tom"
};    

someone.showName.apply();    //window
someone.showName.apply(other);    //Tom

以上是关于javascript this的主要内容,如果未能解决你的问题,请参考以下文章

很实用的JQuery代码片段(转)

VSCode自定义代码片段12——JavaScript的Promise对象

VSCode自定义代码片段12——JavaScript的Promise对象

laravel特殊功能代码片段集合

30秒就能看懂的JavaScript 代码片段

vue2.0 代码功能片段