this

this的理解

定义

  this的指向是再执行时才确定(最后谁调用this就指向谁),并不是创建时就确定的.

example

// 在非严格模式下并且在浏览器中
/**
 *1:在全局变量中this指代的是window对象
  a:var => 声明的变量都会被挂载到window中(例如var a = 1 当你使用a的时候实际是window.a)
 *2:当函数调用的时候this指向的是当前函数调用的最近的对象(如果没有上一级对象则是window对象)
 */
var o = {
  a: 10,
  b: {
    a: 12,
    fn: function() {
      console.log(this);
      console.log(this.a);
    }
  }
};
var j = o.b.fn;
o.b.fn(); // 调用方法里面的this是指代的b对象而不是o对象
j(); // 这里指代的this是window对象,j() 实际是window.j();是window里面来调用

/**
 *    构造函数中
 *    new可以改变this的指向,当前this就会赋给等号左边的变量,即变量就会拥有这个对象的所有属性
 */
function Fn() {
  this.user = "a";
}
var a = new Fn();
console.log(a.user);
function Fn() {
  this.user = "b";
  return {};
}
var b = new Fn();
console.log(b.user); // undefined => 因为这个方法返回的是空对象或者是函数(函数里面没有与之对应属性);
// 特别注意当return返回的是null(虽然也是空对象) b.user // 为b

  转载请注明: 迷一样的自信 this

 上一篇
object object
object对象特性 对象的原型(prototype)指向另外一个对象,本对象的属性继承来自它的原型对象 对象的类(class)是一个标识对象类型的字符串 对象的扩展标记(extensible flag)指明了在(es5中)是否可以向该对象
2018-03-05
下一篇 
typeof 与instanceof的区别 typeof 与instanceof的区别
typeof、instanceof的区别typeof  number,boolean,string,function,object,undefined instanceof  一般判断a变量是否是b变量的实例或者子类 examplevar
2018-02-01
  目录