温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

JavaScript中this有几种绑定规则

发布时间:2022-03-03 10:49:06 来源:亿速云 阅读:128 作者:iii 栏目:web开发

这篇“JavaScript中this有几种绑定规则”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript中this有几种绑定规则”文章吧。

我们先说一个最简单的this在全局指向的是什么呢?

这个问题很简单在浏览器中测试this,全局指向的是window,不过在开发过程中this很少在全局使用,一般都是在函数内的

this有几种绑定规则?

绑定一:默认绑定

// 1.案例一: 

function foo() {

   console.log(this)

 }

 foo()//window

// 2.案例二:

function foo1() {

  console.log(this)

}

function foo2() {

  console.log(this)

  foo1()

}

function foo3() {

  console.log(this)

  foo2()

}

foo3()//window

// 3.案例三:

var obj = {

  name: "why",

  foo: function() {

    console.log(this)

  }

}

var bar = obj.foo

bar() // window

绑定二:隐式绑定

// 1.案例一:

var obj = {

  name: "why",

  foo: foo

}

obj.foo() // obj对象

// 2.案例二:

var obj = {

  age: "哈哈哈",

  eating: function () {

    console.log(this + "在吃东西")

  },

  running: function () {

    console.log(this + "在跑步")

  }

}

obj.eating()//obj对象

obj.running()//obj对象

var fn = obj.eating

fn()

//window,为什么是window呢因为把obj.eating这个函数赋值给了fn,fn在全局调用的所以指向的是window

// 3.案例三:

var obj1 = {

  name: "obj1",

  foo: function () {

    console.log(this)

  }

}

var obj2 = {

  name: "obj2",

  bar: obj1.foo

}

obj2.bar()//obj2对象

绑定三:显示绑定

function foo() {

  console.log("函数被调用了", this)

}

//1.foo直接调用和call/apply调用的不同在于this绑定的不同

//foo直接调用指向的是全局对象(window)

foo()

var obj = {

  name: "obj",

  // age:foo//可以简写这一步

}

//call/apply是可以指定this的绑定对象

foo.call(obj)//obj对象

foo.apply(obj)//obj对象

foo.apply("aaaa")//aaaa

// 2.call和apply有什么区别?

function sum(num1, num2, num3) {

  console.log(num1 + num2 + num3, this)

}

sum.call("call", 20, 30, 40)//传递参数后面可以传无限个数值,都是用逗号分割

sum.apply("apply", [20, 30, 40])//传递参数用数组接收,一样可以传无限个数值,用逗号分割

// 3.call和apply在执行函数时,是可以明确的绑定this, 这个绑定规则称之为显示绑定

绑定四:new绑定

// 我们通过一个new关键字调用一个函数时(构造器), 这个时候this是在调用这个构造器时创建出来的对象

// this = 创建出来的对象

// 这个绑定过程就是new 绑定

function Person(name, age) {

  this.name = name

  this.age = age

}

var p1 = new Person("哈哈哈", 18)

console.log(p1.name, p1.age)//哈哈哈,18

var p2 = new Person("呵呵呵", 30)

console.log(p2.name, p2.age)//呵呵呵,30

这些的案例可以给我们什么样的启示呢?

1.函数在调用时,JavaScript会默认给this绑定一个值;

2.this的绑定和定义的位置(编写的位置)没有关系;

3.this的绑定和调用方式以及调用的位置有关系;

4.this是在运行时被绑定的;

最后说一下默认绑定和显示绑定bind冲突: 优先级(显示绑定)

以上就是关于“JavaScript中this有几种绑定规则”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI