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的更多相关文章

  1. Lazarus下面的javascript绑定另外一个版本bug修正

    Lazarus下面的javascript绑定另外一个版本bug修正 从svn 检出的代码有几个问题 1.fpcjs.pas 单元开始有 {$IFDEF FPC} {$MODE delphi} {$EN ...

  2. JSBinding + SharpKit / 生成JavaScript绑定

    将 UnityEngine 的代码导出到 JavaScript.就可以在 JavaScript 中使用 Unity 的功能. 如何导出? 将需要导出的类添加到 JSBindingSetting.cla ...

  3. javascript绑定时间 含(IE)

    script language = "javascript" type = "text/javascript"> function test(){ win ...

  4. JavaScript绑定事件的方法[3种]

    在JavaScript中,有三种常用的绑定事件的方法: 在DOM元素中直接绑定: 在JavaScript代码中绑定: 绑定事件监听函数. 一. 在DOM元素中直接绑定 这里的DOM元素,可以理解为HT ...

  5. Javascript绑定事件的两种方式的区别

    命名函数 <input type="button" onclick="check()" id="btn"/> <scrip ...

  6. day51—JavaScript绑定事件

    转换学开发,代码100天——2018-05-06 今天学习JavaScript的绑定事件.因为浏览器的原因绑定事件需要考虑兼容性问题. attachEvent     IE浏览器 ,ie9以上事件执行 ...

  7. javascript绑定事件

    本质:不同的库或者工具中总是封装了不同的事件绑定形式,但是究其根源,还是IE事件模型和W3C事件模型不同的处理方式 1)W3C事件模型:支持事件捕捉和冒泡 addEventListener('type ...

  8. javaScript绑定事件委托 demo

    事件绑定通常发生在 onload 或 DOMContentReady , 事件绑定占用 处理时间 占用内存, 而且不是每个事件都会被 点击执行. 由此 事件委托 可以优化事件绑定行为.. 事件逐层冒泡 ...

  9. javascript绑定事件addEventListener与attachEvent

    1.eleObj.addEventListener(eventName,handle,useCapture); eleObj:DOM元素: eventName:事件名称.注意,这里的事件名称没有“ o ...

  10. JavaScript 绑定事件时传递数据

    var data = { name: 'Ruchee', email: 'my@ruchee.com' }; data.handleEvent = function (e) { console.log ...

随机推荐

  1. Angular 学习笔记 (消毒 sanitizer)

    refer : https://www.intricatecloud.io/2019/10/using-angular-innerhtml-to-display-user-generated-cont ...

  2. Go runtime 调度器精讲(九):系统调用引起的抢占

    原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 第八讲介绍了当 goroutine 运行时间过长会被抢占的情况.这一讲继续看 goroutine 执行系统调用时间过长的抢占. 1. 系统调用时 ...

  3. QT框架实现自定义形状截图效果

    文章目录 QT框架普通截图运行效果 QT框架系统级热键的原理 注册热键 反注册热键 获取系统级唯一的整数ID 删除系统级唯一整数ID 原生事件过滤器 QT框架截图的原理 截图窗口 拉框操作 系统剪切板 ...

  4. QT硬件通讯基础

    QT硬件通讯基础 使用AI技术辅助生成 1 QT与硬件通讯概述 1.1 QT硬件通讯的基本概念 1.1.1 QT硬件通讯的基本概念 QT硬件通讯的基本概念 QT硬件通讯的基本概念 QT作为一种跨平台的 ...

  5. laravel中添加公共函数

    laravel中添加公共函数 1. 在项目中的新建app/Helper/functions.php文件 2.在项目的跟目录找到composer.json 文件,并打开,然后再autoload中添加如下 ...

  6. 深入探索Spring AI:源码分析流式回答

    在上一章节中,我们深入分析了Spring AI的阻塞式请求与响应机制,并探讨了如何增强其记忆能力.今天,我们将重点讲解流式响应的概念与实现.毕竟,AI的流式回答功能与其交互体验密切相关,是提升用户满意 ...

  7. 4. 说一下ts

    TypeScript 是微软基于JavaScript开发的开源编程语言,是js的超集,扩展了js语法并添加了静态类型,可以兼容js所有的运行平台: js 是弱类型语言 , ts 是强类型语言 : js ...

  8. How To Delete Reservations Using Standard API INV_RESERVATION_PUB.Delete_Reservation (Doc ID 2219367.1)

    Solution Summary: The reservation API INV_RESERVATION_PUB.Delete_Reservation will delete reservation ...

  9. Notepad--特色功能:拷贝另存为

    Notepad--特色功能:拷贝另存为 你是否纠结如下的使用场景: 正在编辑的文件,还没有想好,保存担心把原文件给覆盖了. 使用"另存为"后当前编辑界面的文档又变成新的文件了,可是 ...

  10. mysql进阶-存储引擎篇

    本篇是将基础篇的知识进行深化了解底层机制的同时讲解企业中涉及到的高层级知识. 存储引擎 1.MySQL体系结构 连接层 最上层是一些客户端和链接服务,主要完成一些类似于连接处理.授权认证.及相关的安全 ...