2020-03-19
call,apply,bind的理解
先说区别call, apply基本上没什么不一样,唯一不一样的地方是传参方式不同 但是bind和call,apply有区别。bind是重新绑定this但是不执行,而apply,call都是绑定完立即执行 举个栗子
function add(a, b) {
return a + b;
} function sub(a, b) {
return a - b;
} // apply传参是传一个数组 call是一个一个的传,这就是他们俩的区别
let result1 = add.apply(sub, [1, 2]); //
let result2 = add.call(sub, 1, 2); //
let result3 = sub.apply(add, [1, 2]); // -1
let result4 = sub.call(sub, 1, 2); // -1 // bind和apply,call不一样的是它不算立即执行,传参方式和call一样
let result5 = add.bind(sub, 1, 2)();
call,apply的理解:
1: 实际上是继承
Dog.apply(cat); 就是cat继承了Dog这个构造函数中的所有内容
function Dog(age) {
this.name = 'dog';
this.showName = function () {
console.log('this is a ' + this.name + age);
}
} function Cat(age) {
this.name = 'cat';
this.showName = function () {
console.log('this is a ' + this.name + age);
}
} let cat = new Cat(18);
Dog.apply(cat, [100]); // cat继承了Dog这个构造函数中的所有内容 cat.showName(); // this is a dog100
console.log(cat.name); // dog

还可以多重继承!!!

function Sub(){
this.showSub = function(a,b){
console.log(a - b);
}
} function Add(){
this.showAdd = function(a,b){
console.log(a + b);
}
} function MathUtils(){
Sub.apply(this);
Add.apply(this);
// Sub.call(this);
//Add.call(this);
} var mathTool = new MathUtils();
mathTool.showSub(1,2); // -1
mathTool.showAdd(1,2); //
 
2: 位置很关键
调用apply,call的位置决定了最后的结果
function Dog() {
this.name = 'dog';
this.showName = function () {
console.log('this is a ' + this.name);
}
} function Cat() {
// Dog.call(this);
// 如果是在最开始就写Dog.call(this);
// 那么下面Cat本身的this.name = 'cat'会把call继承的this.name = 'dog'覆盖;也就不会有变化
this.name = 'cat';
Dog.call(this);
// Dog.call(this); 相当于在这个位置把Dog的代码复制过来
// 也就是相当于在这里写入了
// this.name = 'dog';
// this.showName = function () {...}
// 显然 这里的this.name = 'dog'会把上面的this.name='cat'覆盖
this.showName = function () {
console.log('this is a ' + this.name);
}
}
 

call,apply,bind的理解的更多相关文章

  1. 理解 JavaScript call()/apply()/bind()

    理解 JavaScript this 文章中已经比较全面的分析了 this 在 JavaScript 中的指向问题,用一句话来总结就是:this 的指向一定是在执行时决定的,指向被调用函数的对象.当然 ...

  2. 学习前端的菜鸡对JS的call,apply,bind的通俗易懂理解

       call,apply,bind 在JavaScript中,call.apply和bind是Function对象自带的三个方法,都是为了改变函数体内部 this 的指向.            a ...

  3. call,apply,bind的理解

    call,apply,bind均是用于改变this指向. 三者相似之处: 1:都是用于改变函数的this指向. 2:第一个参数都是this要指向的对象. 3:都可以通过后面的参数进行对方法的传参. l ...

  4. call,apply,bind的用法

    关于call,apply,bind这三个函数的用法,是学习javascript这门语言无法越过的知识点.下边我就来好好总结一下它们三者各自的用法,及常见的应用场景. 首先看call这个函数,可以理解成 ...

  5. JavaScript中call,apply,bind方法的总结。

    why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = { user:"追梦子", fn:f ...

  6. call(),apply(),bind()与回调

    1.call(),apply(),bind()方法 JavaScript 中通过call或者apply用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定 ...

  7. javascript-this,call,apply,bind简述2

    上节我们一起研究了this这个小兄弟,得出一个结论,this指向调用this所在函数(或作用域)的那个对象或作用域.不太理解的朋友可以看看上节的内容,这次我们主要探讨一下call(),apply(), ...

  8. call,apply,bind方法的总结

    why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = { user:"追梦子", fn:f ...

  9. JavaScript中call,apply,bind方法的总结

    原文链接:http://www.cnblogs.com/pssp/p/5215621.html why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之 ...

随机推荐

  1. easyui及读取xml

    本地测试地址例如http://localhost:6541/TreeExam/AuthorityTree TreeExam 是TreeExamController AuthorityTree是Tree ...

  2. mysql日志体系大盘点

    MySql日志文件主要包含:错误日志.慢查询日志.事务日志.二进制日志等 Mysql的日志配置可以通过命令 show global variables like '%log%'; 执行的结果如下 &q ...

  3. mysql基本操作汇总

    1.数据库操作 (1)创建数据库 CREATE DATABASE <数据库名>; 例子: CREATE DATABASE IF NOT EXISTS RUNOOB DEFAULT CHAR ...

  4. Redis 消息中间件 ServiceStack.Redis 轻量级

    问题: 公司开了个新项目,算上我一共3个人.车间里机台通过流水线连通联动的玩意.一个管理控制系统连接各个机台和硬件.专机类型就有5种,个数差不多20个左右. 软件规划的时候采用总分的结构,管理控制系统 ...

  5. PAT-1057 Stack (树状数组 + 二分查找)

    1057. Stack Stack is one of the most fundamental data structures, which is based on the principle of ...

  6. Poj 3013基础最短路

    Description Christmas is coming to KCM city. Suby the loyal civilian in KCM city is preparing a big ...

  7. JUC整理笔记二之聊聊volatile

    要想学好JUC,还得先了解 volatile 这个关键字.了解 volatile ,我们从一个例子开始吧. 本文不会很详细去说java内存模型,只是很简单地学习一下volatile 一个例子 pack ...

  8. Python Redis常用操作(持续更新)

    目录 1.Redis简介 2.Redis部署 3.Redis API应用 4.String操作 1.Redis简介 redis是业界主流的key-value,nosql数据库之一.和Memcached ...

  9. Element Form表单实践(下)

    作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e8 ...

  10. Python 每日一练(4)

    引言 今天继续是python每日一练的几个专题,主要涵盖简单的敏感词识别以及图片爬虫 敏感词识别 这个敏感词的识别写的感觉比较简单,总的概括之后感觉功能可以简略成if filter_words in ...