千家信息网

JavaScript中this有几种绑定规则

发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,这篇"JavaScript中this有几种绑定规则"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起
千家信息网最后更新 2025年11月10日JavaScript中this有几种绑定规则

这篇"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有几种绑定规则"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

对象 案例 函数 规则 全局 内容 指向 位置 是在 不同 参数 就是 数值 文章 知识 篇文章 过程 逗号 构造器 东西 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 邵阳软件开发培训学费 大型服务器开发框架 我的世界服务器建造手机版免费 软件开发的生命周期是指什么 小米路由器代理服务器 上海网络安全功能 软件开发接项目签什么合同 教育局网络安全培训计划 常州idc服务器哪个厂家质量好 乌镇互联网大会“黑科技” 网络安全网络文明手抄报 网络技术宣传视频 软件开发在一个公司呆很久 ip网络技术生长期 提高无线网络安全性 软件开发需要具备的技能 软件开发提交成果 数据库应用技术约定符号 软件开发是大学专业吗 自上而下和自下而上软件开发 根据网络安全法规定用户 兆易创新软件开发面试经验 鲲鹏服务器什么时候可以做 北京信万软件开发有限公司 智能五笔下载软件开发 网络安全手机丢失信息怎么办 什么是关键码数据库 网络安全等保测评员证书 云主机没有数据库 宁波市公安局 网络安全
0