JS中this指向

作者: LemonnYan | 来源:发表于2019-07-22 10:22 被阅读5次

函数有4种调用方式,对应就有4种绑定规则:默认绑定、隐式绑定、硬绑定和构造函数绑定。

1、默认绑定

当作为普通函数被调用时,就会发生默认绑定,this指向全局对象。在严格模式中,this的值会变为undefined。

function func1(){
  console.log(this);  //this
}
func1();

function func2(){
  "use strict";
  console.log(this);  //undefined
}
func2();

2、隐式绑定

当作为对象方法被调用时,就会发生隐式绑定,this指向调用该方法的对象。

var obj={
  name:"lemon",
  getName:function(){
    console.log(this.name);  //lemon
  }
}
obj.getName();

3、硬绑定

当调用函数的方法apply()、call()或bind()时,就能指定this要绑定的对象。如果传入null或undefined,会被替换为全局对象(window);如果传入其它原始值(数字、字符串或布尔值),会被自动转化为对应的包装对象(Number、String或Boolean)。

var obj={
  name:"lemon",
  getName:function(){
   return this.name;
  },
  getThis:function(){
   return this;
  }
};

var name="freedom";
obj.getName.apply(null);  //"freedom"
obj.getName.apply(undefined);  //"freedom"
obj.getName.apply(true);   //new Boolean(true);

4、构造函数绑定

当用new运算符调用构造函数时,会创建一个新对象,构造函数中的this会与这个新对象绑定在一起。

var name="freedom";
function func(){
  this.name="lemon";
  this.getName=function(){
   return this.name;
  };
};

var obj=new func();
obj.getName();   //"lemon"

相关文章

  • JS进阶篇-this指向问题

    JS中this的指向问题不同于其他语言,JS中的this不是指向定义它的位置,而是在哪里调用它就指向哪里。 JS中...

  • JS中this指向

    一、全局作用域中的thises5与es6中严格模式与非严格模式全局函数的this都指向window 二、全局作用域...

  • JS中this指向

    函数有4种调用方式,对应就有4种绑定规则:默认绑定、隐式绑定、硬绑定和构造函数绑定。 1、默认绑定 当作为普通函数...

  • js中this指向

    1.this总是指向函数的直接调用者2.如果有new关键字,this指向new出来的那个对象3.DOM事件中thi...

  • JS中this指向

    (1)事件调用环境:谁触发事件,函数里面的this指向就是谁(某个DOM)。 (2)node全局环境:this指向...

  • js中this指向

    当我们需要把函数当做另外函数参数传入时,我们使用箭头函数。 关于this的指向。 问题:箭头函数中的this是如何...

  • 关于js函数中this的指向的问题

    @(javascript)[JavaScript中this的指向] 关于js函数中this的指向的问题 javas...

  • JS中this的指向

    什么是this? 它是函数运行时,在函数体内部自动生成的一个对象,只能在函数体内部使用。 JS中this的指向,取...

  • JS中this的指向

    JS中this的指向 1.背景介绍 2.知识剖析 3.常见问题 4.解决方案 5.编码实战 6.扩展思考 7.参考...

  • JS中this的指向

    1、普通函数中this的指向( 普通函数中的this指针指向于调用者) 2、定时器中的this的指向 3、在对象...

网友评论

    本文标题:JS中this指向

    本文链接:https://www.haomeiwen.com/subject/rtlilctx.html