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 Material 18+ 高级教程 – CDK Observers

    前言 Observers 是 Angular Material 对游览器原生 MutationObserver 的上层封装.主要用于监听 add/remove Node. 不熟悉的朋友可以先看这篇 D ...

  2. Asp.net core 学习笔记之 authen + autho + oidc + oauth + spa 第九篇 (external login)

    External login 就是指通过 Google, Microsoft, Facebook account 做登入. https://docs.microsoft.com/en-us/aspne ...

  3. 网络服务性能优化:Wrktcp与Perf工具详解

    wrktcp安装 码云地址:https://gitee.com/icesky1stm/wrktcp 直接下载,cd wrktcp-master && make,会生成wrktcp,就o ...

  4. java_day1_认识计算机,java环境,Java关键字、标识符、注释

    一.认识计算机 1.组成: 硬件:cpu,内存,显卡,... 软件: 系统软件:WPS, wegame, steam, IDEA,..... 应用软件:WPS, wegame, steam, IDEA ...

  5. electon的入口文件 main 指定

    任何 Electron 应用程序的入口都是 main 文件. 这个文件控制了主进程,它运行在一个完整的Node.js环境中,负责控制您应用的生命周期,显示原生界面,执行特殊操作并管理渲染器进程(稍后详 ...

  6. 你所理解的 mvvm 模型

    mvvm 是Model-View-ViewModel 数据驱动视图模型,是mvc 的改进版 ,mvvm把界面ui和业务逻辑分离 ,model 是data属性的数据 , view 是模板结构 ,view ...

  7. Nuxt.js 应用中的 kit:compatibility 事件钩子详解

    title: Nuxt.js 应用中的 kit:compatibility 事件钩子详解 date: 2024/10/11 updated: 2024/10/11 author: cmdragon e ...

  8. 016 Python 中的基本运算符

    #!/usr/bin/env python # -*- coding:utf-8 -*- # Datatime:2022/7/28 15:01 # Filename:016 Python 中的基本运算 ...

  9. 实现.NET 4.0下的Task类相似功能组件

    实现 .NET 4.0 下的 Task 类相似功能:TaskExCum 组件详解 引言 随着 .NET 技术的发展,异步编程模型逐渐成为现代应用程序开发中的标准实践之一..NET 4.5 引入了 Ta ...

  10. MMCA:多模态动态权重更新,视觉定位新SOTA | ACM MM'24 Oral

    来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Visual Grounding with Multi-modal Conditional Adaptation 论文地址:https://a ...