【js】关于this指针-理解call、apply、bind
首次讲解视频,听了一下,录音声音太小(暂不知道该怎么调节),老是咳咳,不太流畅。暂时不理想,日后继续努力。(能写出来还不够,还要会说出来)
首先,this指针只存在于函数(function)中。用于指向一个对象
this在不同函数中有3种代表方式:
普通函数中:代表window对象
构造函数中:代表new出来的对象
对象方法中:代表调用该方法的对象

改变对象this指向的3个方法:

call:改变函数this指向
不传/null/undefined时,this都表示window

传对象,this代表该对象

传函数,this代表该函数

说明:除了,不传/null/undefined,代表window。其他的传什么,就代表什么。
call:可以让b函数调用a的属性和方法。
让this代表a。可传2参。

apply:将数组元素分别付给函数的参数
传个数组,分别赋给x,y,z:call就不分别了。

bind:绑定事件期间改变this指向
F的this指向obj,this.a就代表obj.a=1,点击网页时,执行F函数

call实现继承:
A是构造函数,B使用call,就可以继承于A。
使B对象可以使用A的属性和方法。

call实现移花接木:数组方法用到类数组中
arguments是类数组
test函数获得所有传参后,在call回调中进行处理

额外学习:给内置函数新增方法。
获取数组的最大值实现

【js】关于this指针-理解call、apply、bind的更多相关文章
- 前端面试 js 你有多了解call,apply,bind?
函数原型链中的 apply,call 和 bind 方法是 JavaScript 中相当重要的概念,与 this 关键字密切相关,相当一部分人对它们的理解还是比较浅显,所谓js基础扎实,绕不开这些基础 ...
- 使用另一种方式实现js中Function的调用(call/apply/bind)
在JavaScript中函数的调用可以有多种方式,但更经典的莫过于call和apply.call跟apply都绑定在函数上,他们两个的第一个参数意义相同,传入一个对象,他作为函数的执行环境(实质上是为 ...
- 理解call(),apply(),bind()
三者皆是修改this指向call(this指向,参数,参数,参数...) ====>深研究:https://developer.mozilla.org/zh-CN/docs/Web/JavaSc ...
- 学习前端的菜鸡对JS的call,apply,bind的通俗易懂理解
call,apply,bind 在JavaScript中,call.apply和bind是Function对象自带的三个方法,都是为了改变函数体内部 this 的指向. a ...
- js中的call,apply,bind区别
在JavaScript中,call.apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向. call.apply.bind方法的共同点和区别:app ...
- 理解 JavaScript call()/apply()/bind()
理解 JavaScript this 文章中已经比较全面的分析了 this 在 JavaScript 中的指向问题,用一句话来总结就是:this 的指向一定是在执行时决定的,指向被调用函数的对象.当然 ...
- JS 的 call apply bind 方法
js的call apply bind 方法都很常见,目的都是为了改变某个方法的执行环境(context) call call([thisObj[,arg1[, arg2[, [,.argN]]]] ...
- js 中arguments,call,apply,bind的使用
//对于 arguments和this, 每个函数都有自己独有的arguments和this, 且不进行链式查找 //arguments是什么? //答:1:arguments是收到的实参副本 //2 ...
- 前端基础:call,apply,bind的的理解
背景 前两天在做小程序的需求的时候用到bind的时候才想起自己对这三的东西的了解比较浅薄,这个时候用的时候就有点怕.时候还是要好好学习下,理解下怎么玩. 正文 先说call 和 apply吧:ECMA ...
- call,apply,bind的理解
2020-03-19 call,apply,bind的理解 先说区别call, apply基本上没什么不一样,唯一不一样的地方是传参方式不同 但是bind和call,apply有区别.bind是重新绑 ...
随机推荐
- python在读取文件时出现 'gbk' codec can't decode byte 0x89 in position 68: illegal multibyte sequence
python在读取文件时出现“UnicodeDecodeError:'gbk' codec can't decode byte 0x89 in position 68: illegal multiby ...
- 【动态规划dp】青蛙的烦恼
青蛙的烦恼(frog) 原文:https://blog.csdn.net/xyc1719/article/details/79844952 [题目描述] 池塘中有 n 片荷叶恰好围成了一个凸多边形,有 ...
- 【Python基础】lpthw - Exercise 44 继承与组合
一.继承 原则:大部分使用继承的场合都可以用组合取代或者简化,而多重继承则需要不惜一切的避免. 1. 什么是继承 继承:用于指明一个类的大部分或者全部功能都是从一个父类获得的.此时,父类的实例的所有动 ...
- Django创建项目基本步骤
1.新建项目 django-admin startproject cmdb(项目名) 2.启动服务python manage.py runserver 0.0.0.0:8000(表示服务监听在8000 ...
- poj2688
#include<iostream> using namespace std; #include<time.h> int m,n; ][]; ][]; typedef stru ...
- Autofac之类型注册
本次主要学习一下Autofac中实现类型注册的几种方式,这里并不打算一开始就从基于接口开发的服务关联切入,而是先从一个简单的类型注册来学起,虽然实际开发中可能不会这么做,但是个人感觉从这里学起理解能能 ...
- HANA SQL备忘录
1.改变元素列类型 ALTER TABLE <TABLE_NAME> ALTER (<COLUMN_NAME> <COLUMN_TYPE>);
- centos 7 挂载U盘
参考网址:https://blog.csdn.net/fengjunwang1980/article/details/78062838 1.首先使用fdisk -l命令查看磁盘情况 如果不知道哪一个是 ...
- Spring Boot web简介及原理 day04
一.SpringBoot创建web开发(三部曲) 1.快速构建SpringBoot项目,并以jar包的形式构建 2.选择对应的功能模块 (选定场景,配置少量的配置就可运行,不配置有默认值) 3.编写自 ...
- Win10 +gtx1660 +CUDA10.0+CNDNN7.5+Tensorflow 1.13.1
硬件环境:ASUS Z370 + i7 8700K + 16G + GTX1660 软件环境:win10 x64 anaconda 3.5 python 3.6 pycharm 201 ...