<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>函数的方法call、apply、bind</title>
</head>
<body>
<script>
// 1.call()和apply()的第一个实参是要调用函数的母对象,它是调用上下文,在函数体内通过this来获得对它的引用。要想以对象o的方法来调用函数f(),可以像下面实例这样使用call(要调用函数的母对象,待调用函数的值)和apply(要调用函数的母对象,用数组表示待调用函数的值)
var o = {
x:3,
m:function(x){
console.log(x);
}
}
o.m(2);//2
console.log(o['m']);//function (x){console.log(x);}
function f(c){
return c+1;
}
console.log(f.call(o,0));//1
console.log(f.apply(o,[2]));//3
// 将对象o中名为m()的方法替换为另一个方法
// 可以在调用原始的方法之前和之后记录日志消息

function trace(o,m){
var original = o[m];//在闭包中保存原始方法
o[m] = function(){
console.log(new Date(),"Entering:",m);//输出日志消息
var result = original.apply(this,arguments);//调用原始函数
console.log(new Date(),"Exiting",m);//输出日志信息
return result;
}
}
trace(o,'m');
console.log(o['m']);
//function (){
// console.log(new Date(),"Entering:",m);//输出日志消息
// var result = original.apply(this,arguments);//调用原始函数
// console.log(new Date(),"Exiting",m);//输出日志信息
// return result;
//}
// 2.bind()方法主要将函数绑定至某个对象。当在函数f()上调用bind方法并传入一个对象o作为参数,这个方法将返回一个新的函数。
function f(y){return this.x + y};//这个是待绑定的函数
var o = {x:1};//将要绑定的对象
var g = f.bind(o);//通过调用g(x)来调用o.f(x)
console.log(f.call(o,2));//3
// console.log(o);
console.log(g(2));//3

</script>
</body>
</html>

转载于:https://www.cnblogs.com/studyh5/p/9317865.html

函数的方法call、apply、bind相关推荐

  1. JS函数方法Call Apply Bind运用

    JS 函数非继承的call和apply方法 同:call & apply 主要是用于扩展this指向,降低this作用域与函数之间的耦合度: 区别:传参差异 function.call(thi ...

  2. ES6/03/函数的定义方式和调用方式,函数内的this指向,改变函数中this指向的三个方法(call(),apply(),bind())

    函数的定义方式 1,自定义函数(命名函数) function fun(){}; 2,函数表达式(匿名函数) var fun =function(){}; 3,利用new Function( '参数1' ...

  3. 总结apply和call方法的使用 bind方法 bind方法的使用 函数中的几个成员

    总结apply和call方法的使用 <!DOCTYPE html> <html lang="en"> <head><meta charse ...

  4. 函数调用的方法一共有 4 种,call,apply,bind

    1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法. 2. 相同点:这两个方法的作用是一样的. 都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖 ...

  5. JavaScript内置一些方法的实现原理--new关键字,call/apply/bind方法--前戏

    new关键字,call/apply/bind方法都和this的绑定有关,在学习之前,首先要理解this. 一起来学习一下this吧 首先.this是一个对象. 对象很好理解,引用类型值,可以实现如th ...

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

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

  7. 函数的this指向,call,apply bind改变this指向

    函数在定义的时候不会影响它的this指向,只有在调用的时候选择不同的调用方式,才会决定你this指向何处. 在独立函数调用的时候,this指向window,在调用挂载在window的函数时,前面的wi ...

  8. 手写call,apply,bind函数

    涉及面试题 call,apply,bind函数内部实现是怎样的? 考虑两点: 第一个参数为undefined或null的时候,那么会转变为window 改变了this执行,让新的对象可以执行该函数. ...

  9. JavaScript笔记6(数组,foreach(),slice(),splice(),数组的剩余方法,函数的方法call和apply ,arguments,Date对象,Math,字符串的相关方法)

    JavaScript 数组(Array) forEach(),slice(),splice() 数组的剩余方法 函数的方法call()和apply() arguments Date对象 Math 字符 ...

最新文章

  1. 第一本用机器生成的书籍由施普林格•自然出版
  2. 浅析FPGA时序相关问题
  3. My Goal For SE
  4. 【线上分享】基于CDN边缘网络智能优化图片和视频
  5. SecureCRT 设置和修改
  6. [ASP.NET Core MVC] 如何实现运行时动态定义Controller类型?
  7. Go语言实战 : API服务器 (8) 中间件
  8. CentOS服务器下对mysql的优化
  9. 【springmvc+mybatis项目实战】杰信商贸-2.数据库配置
  10. python程序变量名_python 变量名的规范
  11. IDEA 控制台显示Run Dashboard
  12. centos下安装transmission下载工具
  13. 使用微软官方工具制作Windows系统启动U盘
  14. AutoLine源码之RobotFramework运行器
  15. 前端处理无网络兜底图片展示
  16. 第一行代码Android技巧1——知晓当前是在哪一个活动
  17. BERT破的11项纪录具体都是什么?
  18. c语言文字冒险类游戏,课内资源 - 基于C语言和easyx实现的巧虎划船大冒险游戏...
  19. 报错:SyntaxError: Unexpected token u in JSON at position 0 at JSON.parse (<anonymous>)
  20. 论文笔记 |【AAAI2022】Best-Buddy GANs for Highly Detailed Image Super-Resolution

热门文章

  1. 中科元素精准饮食 功能性农业-李喜贵:电视荧屏广州地铁线展示
  2. 精准扶贫探索新融合模式-农业大健康·李龙:谋定乡村振兴
  3. [BOI2019][第K大问题][暴力剪枝]D2T1 Olympiads
  4. Docker-数据管理
  5. 第三章 python数据规整化
  6. Python 根据地址获取经纬度及求距离
  7. [3]MVC3中使用Telerik(转)
  8. mysql生成数据库结构图
  9. 从投票应用说起,功能才不是轻社交App的核心呢!
  10. 【推荐】整理者:明日互联网的枢纽角色