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 ...
随机推荐
- HTML & CSS – Responsive Image 响应式图片 (完整版)
前言 之前就有写过关于 Retina 和 Responsive Image 响应式图片 (responsive image) Retina 显示屏 但写的太烂了, 所以有了后来的 屏幕, 打印, 分辨 ...
- CSS – Media Query
前言 Media Query 是用来做 RWD 的, 类似 JS 的 if else. 写的多有伤管理, 所以要谨慎使用哦. 参考: Learn CSS Media Query In 7 Minute ...
- Java获取Object中Value的方法
在Java中,获取对象(Object)中的值通常依赖于对象的类型以及我们希望访问的属性.由于Java是一种静态类型语言,直接从一个Object类型中访问属性是不可能的,因为Object是所有类的超类, ...
- 信创环境经典版SuperMap iManager监控外部SuperMap iServer资源失败,无法监控目标GIS服务器CPU与内存使用情况
一.问题环境 操作系统:银河麒麟kylin V10 CPU:鲲鹏920 SuperMap iServer 10.2.0 SuperMap iManager 10.2.1 二.现象 部署完经典版Supe ...
- 阿里云Centos7修改MariaDB数据库连接时间,解决连接mysql报Too many connection的问题
在测项目的时候突然发现数据库连接不上了,提示Too many connection. 产生问题的原因是MySQL的Sleep进程占用了大量的连接,当时是重启mysql解决的这个问题!后来又配置了连接池 ...
- 10-react不同层级的组件之间的数据传递数据 createContext 上下文
// 组件传值 props 接收传递过来的数据 import ReactDom from "react-dom" import { createContext, Component ...
- 43.v-if和v-for的优先级
v-for 的优先级高 延申问题:v-for 和 v-if 为什么不能在一起使用 ? 会造成性能的浪费,因为v-for 的优先级高,所以每次渲染都会执行v-if 判断条件,浪费时间 :比如 渲染 10 ...
- 王树森Attention与Self-Attention学习笔记
目录 Seq2Seq + Attention Attention的原理 方法一(Used in the original paper) 方法二(more popular,the same to Tra ...
- 图菱科技 SaaS 系统容器化最佳实践
大家好,我是龚承明,在图菱(成都)科技有限公司任职,主要负责公司的产品系统研发以及公司IT基础设施的建设工作.本篇文章将为大家介绍下我司在采用 KubeSphere 平台实现公司业务系统容器化过程中的 ...
- 快速部署pxc集群
点击查看代码 同步 systemctl stop firewalld && systemctl disable firewalld systemctl stop NetworkMana ...