首页 > 代码库 > javascript this

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();    //windowsomeone.showName.apply(other);    //Tom

javascript this