博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
call,apply,bind
阅读量:5098 次
发布时间:2019-06-13

本文共 1929 字,大约阅读时间需要 6 分钟。

call

非严格模式

var obj = { name: "jie" };        function fn(num1, num2) {            console.log(this);            console.log(num1 + num2);        }        fn(100,200);   //this ->window  num1=100,num2=200        fn.call(100,200)   //this->100  num1 = 200,num2=undefined        fn.call(obj,100,200);  //this->obj  num1 = 100,num2=200        fn.call();  //this->window        fn.call(null); //this->window        fn.call(undefined); //this->window

严格模式

'use strict';        var obj = {name:"jie"};        function fn(num1,num2){            console.log(this);            console.log(num1+num2);        }        fn(100,200);   //this ->window  num1=100,num2=200        fn.call(100,200)   //this->100  num1 = 200,num2=undefined        fn.call(obj,100,200);  //this->obj  num1 = 100,num2=200        fn.call();   //undefined        fn.call(null);  //null        fn.call(undefined);  //undefined

apply

  1. apply和call的方法的作用是一模一样的,
  2. call在给fn传递参数的时候,是一个个的传递值的,而apply不是一个一个传,而是把要给fn传递的参数值统一放在一个数组中进行操作,但是也相当于一个个的给fn的形参赋值
var obj = { name: "jie" };        function fn(num1, num2) {            console.log(this);            console.log(num1 + num2);        }        fn(100,200);   //this ->window  num1=100,num2=200        fn.apply([100,200])   //this->[100,200]  num1 = NaN,num2=NaN        fn.apply(obj,[100,200]);  //this->obj  num1 = 100,num2=200        fn.apply();  //this->window        fn.apply(null); //this->window        fn.apply(undefined); //this->window

bind

  1. 预处理:事先把fn的this改变为我们想要的结果,并且把对应的参数值也准备好,以后要用到了,直接的执行即可
  2. var result = fn.bind(obj,1,2) 只是改变了fn中的this为obj,并且给fn传递了两个参数值100,200,但是此时并没有把fn这个函数执行,执行bind会有一个返回值,这个返回值result就是我们把fn的this改变后的哪个结果
var obj = { name: "jie" };        function fn(num1, num2) {            console.log(this);            console.log(num1 + num2);        }        var result = fn.bind(obj, 100, 200);  //this->obj  num1 = 100,num2=200        console.log(result)

1504257-20181102205818758-1396173650.png

转载于:https://www.cnblogs.com/lalalagq/p/9898407.html

你可能感兴趣的文章
[AIR] 获取U盘,打开U盘
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...
查看>>
证件照(1寸2寸)拍摄处理知识汇总
查看>>
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
asp.net 获取IP地理位置的几个主要接口
查看>>
Python入门-函数
查看>>
[HDU5727]Necklace(二分图最大匹配,枚举)
查看>>
距离公式汇总以及Python实现
查看>>
设计模式之装饰者模式
查看>>
一道不知道哪里来的容斥题
查看>>
Blender Python UV 学习
查看>>
window添加右键菜单
查看>>
入手腾龙SP AF90mm MACRO
查看>>
ORACLE 递归查询
查看>>
[Android] 开发第十天
查看>>
操作~拷贝clone()
查看>>
jQuery源码分析(2) - 为什么不用new jQuery而是用$()
查看>>