JavaScript 绑定this
1.临时改变函数调用时this的指向
- 方法:call()与apply(),第一个参数为此次调用时的this指向,如果不传,则则等同于指定全局对象,后面的参数为函数原本的参数
- 区别:apply()方法传递参数时,使用数组进行包裹
<script>
function Person(name){
this.name = name
}
Person.prototype.say = function(f1,f2){
console.log(`你好,我是${this.name},我的朋友是${f1}和${f2}`)
}
var p1 = new Person("张三")
p1.say("李四","王五") //你好,我是张三,我的朋友是李四和王五
var cat = {name:"喵喵"}
// 本来cat是不能调用say()的,因为它本身没有这个属性
// 但是我们不想去创建这个属性,想直接调用Person原型上面的say()
// 我们可以使用 call 和 apply 调用这个say(),并改变某个函数运行时内部的this指向
// call传参
p1.say.call(cat,"威威猫","蓝猫") //你好,我是喵喵,我的朋友是威威猫和蓝猫
// apply的参数放在数组中传入
p1.say.apply(cat,["威威猫","蓝猫"]) //你好,我是喵喵,我的朋友是威威猫和蓝猫
</script>
- 注意:传入的this必须是一个对象,如果传入非对象,被自动转成包装对象
2.强制绑定函数的this
- 由来:一般来说,函数谁调用指向谁,但是bing()方法可以返回一个强制绑定了this的函数
- 语法:fn.bind(要绑定的this,传参)
<script>
var name ="全局的name"
function showName(){
console.log(this.name)
}
showName() //"全局的name"
var p = {
name:"张三"
}
p.showName() //"张三"
// 将强制绑定默认this的函数返回
var test_bind_fn = showName.bind({name:"坂本"})
test_bind_fn() //"坂本"
</script>
- 传参:除了给函数绑定this,还可以绑定参数,参数绑定后再传参调用无效
<script>
var multiplier = 5
function getValue(num){
return this.multiplier * num
}
//this指向全局 5*2 = 10
console.log(getValue(2)) //10
//同事绑定this和参数
var getValue2 = getValue.bind({multiplier:6},4)
//直接调用 6*4 = 24
console.log(getValue2()) //24
//传参无效
console.log(getValue2(5)) //24
</script>
应用场景:Vue中methods所有的方法的this都是指向实例本身,这就需要用到bind()方法,比如在vue中对模版解析时,会对含有@click属性的元素进行事件监听,这个监听的回调方法需要使用bing()为其绑定this
<button @click="onClick" id="btn">test</button>
//目标元素
var btn = document.querySelector("#btn")
//为元素添加事件 并绑定this
btn.addEventListener('click',onClick.bind(vm))
JavaScript 绑定this的更多相关文章
- Lazarus下面的javascript绑定另外一个版本bug修正
Lazarus下面的javascript绑定另外一个版本bug修正 从svn 检出的代码有几个问题 1.fpcjs.pas 单元开始有 {$IFDEF FPC} {$MODE delphi} {$EN ...
- JSBinding + SharpKit / 生成JavaScript绑定
将 UnityEngine 的代码导出到 JavaScript.就可以在 JavaScript 中使用 Unity 的功能. 如何导出? 将需要导出的类添加到 JSBindingSetting.cla ...
- javascript绑定时间 含(IE)
script language = "javascript" type = "text/javascript"> function test(){ win ...
- JavaScript绑定事件的方法[3种]
在JavaScript中,有三种常用的绑定事件的方法: 在DOM元素中直接绑定: 在JavaScript代码中绑定: 绑定事件监听函数. 一. 在DOM元素中直接绑定 这里的DOM元素,可以理解为HT ...
- Javascript绑定事件的两种方式的区别
命名函数 <input type="button" onclick="check()" id="btn"/> <scrip ...
- day51—JavaScript绑定事件
转换学开发,代码100天——2018-05-06 今天学习JavaScript的绑定事件.因为浏览器的原因绑定事件需要考虑兼容性问题. attachEvent IE浏览器 ,ie9以上事件执行 ...
- javascript绑定事件
本质:不同的库或者工具中总是封装了不同的事件绑定形式,但是究其根源,还是IE事件模型和W3C事件模型不同的处理方式 1)W3C事件模型:支持事件捕捉和冒泡 addEventListener('type ...
- javaScript绑定事件委托 demo
事件绑定通常发生在 onload 或 DOMContentReady , 事件绑定占用 处理时间 占用内存, 而且不是每个事件都会被 点击执行. 由此 事件委托 可以优化事件绑定行为.. 事件逐层冒泡 ...
- javascript绑定事件addEventListener与attachEvent
1.eleObj.addEventListener(eventName,handle,useCapture); eleObj:DOM元素: eventName:事件名称.注意,这里的事件名称没有“ o ...
- JavaScript 绑定事件时传递数据
var data = { name: 'Ruchee', email: 'my@ruchee.com' }; data.handleEvent = function (e) { console.log ...
随机推荐
- A股迎来中报季,合合信息文档解析技术辅助大模型深度解读财报
财务报告是公众和投资者了解企业经营状况的主要信源之一.步入8月中下旬,上市公司进入了中报披露高峰期.据东方财富Choice数据统计,截至8月14日数据,A股有超过1715只个股公布了2024年半年度业 ...
- SpringMVC —— REST风格简介
REST风格简介 REST(Representational State Transfer),表现形式转换 传统风格资源描述形式 REST风格描述形式 优点 隐藏资源的访问行为,无法通过地址得知对资源 ...
- IDEA如何自动导入依赖的jar包
前言 我们在使用IDEA开发时,会引入第三方的jar包,这些第三方的jar包使我们可以快速的使用别人开发好的功能,而不用重复造轮子了. 这大大提高了我们的开发效率. 但是,有时候我们一下子需要导入太多 ...
- Vue 3 + Vite + SuerMap iClient构建报错Uncaught TypeError utils.inherits is not a function
一.现象 Uncaught TypeError: utils.inherits is not a function 二.问题产生原因 Elasticsearch本身就需要这些东西,以前没有问题是因为W ...
- ceph-rbd和cephfs使用
目录 1 用户权限管理和授权流程 1.1 列出用户 1.2 用户管理 1.2.1 ceph auth add 1.2.3 ceph auth get-or-create 1.2.4 ceph auth ...
- Android应用启动全流程分析(源码深度剖析)
目录 1.前言 2.大纲 3. Input触控事件处理流程 3.1 系统机制分析 3.2 结合Systrace分析 4. 应用进程的创建与启动 4.2 创建应用进程 4.2.1 AMS 发送socke ...
- Data Summit 2022 大会资料分享(共23个)
Data Summit (数据峰会)是国际上关于数据管理.分析方面最新战略和技术研讨的顶尖峰会,通过行业领先的企业.专家的分享,共同探讨大数据和数据科学领域的发展现状与最新技术研究. 2022年5月1 ...
- 45. beforeCreate和created的区别
data数据和methods的方法是否存在,是否定义了 : beforeCreate 都是 undefiend :
- 13 Multi-Head Self-Attention(从空间角度解释为什么做多头)
博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...
- KubeSphere v4 开源并发布全新可插拔架构 LuBan
2024 年 10 月 10 日,KubeSphere 开源社区激动地向大家宣布,KubeSphere v4(开源版)已正式发布,同时发布全新可插拔架构 KubeSphere LuBan. 相较于 K ...