熟练掌握js中this的用法,解析this在不一样应用场景的做用

因为其运行期绑定的特性,JavaScript 中的 this 含义要丰富得多,它能够是全局对象、当前对象或者任意对象,这彻底取决于函数的调用方式。
JavaScript 中函数的调用有如下几种方式:做为函数调用,做为对象方法调用,做为构造函数调用,和使用 apply 或 call 调用。下面咱们将按照调用方式的不一样,分别讨论 this 的含义。
状况一:纯粹的函数调用
这是函数的最一般用法,属于全局性调用,所以this就表明全局对象Global。
一、函数也能够直接被调用,此时 this 绑定到全局对象。
function makeNoSense(x) { 
    this.x = x; 
} 
makeNoSense(5); 
console.log(x);// x 已经成为一个值为 5 的全局变量
function test(){
  this.x = 1;
  alert(this.x);
}
test(); // 1

状况二:做为对象方法的调用java

函数还能够做为某个对象的方法调用,这时this指代对象内部属性被调用。编程

var myObject = {
  value :0,
  increment:function (inc){
    this.value += typeof inc ==='number' ? inc:1;
  }
};
myObject.increment();
console.log(myObject.value);  //1
myObject.increment(2);
console.log(myObject.value);  //3

状况三 :做为构造函数调用数组

javaScript 支持面向对象式编程,与主流的面向对象式编程语言不一样,JavaScript 并无类(class)的概念,而是使用基于原型(prototype)的继承方式。
相应的,JavaScript 中的构造函数也很特殊,若是不使用 new 调用,则和普通函数同样。做为又一项约定俗成的准则,构造函数以大写字母开头,提醒调用者使用正确的方式调用。若是调用正确,this 绑定到新建立的对象上。
所谓构造函数,就是经过这个函数生成一个新对象(object)。这时,this就指这个新对象。
function Point(x, y){ 
    this.x = x; 
    this.y = y; 
 }
var p1 = new Point(3,2);
console.log(p1.x+","+p1.y);//3,2

为了代表这时this不是全局对象,我对代码作一些改变:app

var x = 4;
function Point(x, y){ 
    this.x = x; 
    this.y = y; 
 }
var p1 = new Point(3,2);
console.log(p1.x+","+p1.y);//3,2

状况四: apply或call调用编程语言

让咱们再一次重申,在 JavaScript 中函数也是对象,对象则有方法,apply 和 call 就是函数对象的方法。这两个方法异常强大,他们容许切换函数执行的上下文环境(context),即 this 绑定的对象。不少 JavaScript 中的技巧以及类库都用到了该方法。让咱们看一个具体的例子:
function Point(x, y){ 
    this.x = x; 
    this.y = y; 
    this.moveTo = function(x, y){ 
        this.x = x; 
        this.y = y; 
        console.log(this.x+","+this.y);
    } 
} 
var p1 = new Point(0, 0); 
var p2 = {x: 0, y: 0}; 
p1.moveTo(1, 1); //1,1
p1.moveTo.apply(p2, [10, 10]);//10,10

在上面的例子中,咱们使用构造函数生成了一个对象 p1,该对象同时具备 moveTo 方法;使用对象字面量建立了另外一个对象 p2,咱们看到使用 apply 能够将 p1 的方法应用到 p2 上,这时候 this 也被绑定到对象 p2 上。另外一个方法 call 也具有一样功能,不一样的是最后的参数不是做为一个数组统一传入,而是分开传入的。本文经过对JavaScript中常常容易混淆的this在四中应用场景中的使用方法进行了讲解,但愿对您有所帮助,喜欢的话,请推荐一下哦。函数

相关文章
相关标签/搜索