一、call原理

1、使用JQuery的call功能

var add(c,d){
return this.a+this.b+c+d
}
var obj={a:1,b:2} add.Call(obj,3,4);
//结果: 10 观察:
var o={
  a:1,
b:2,
add:function(c,d){
    return this.a+this.b+c+d;
}
}
o.add(3,4);

2、原理分析

//先来看一下网上找的案例,建议跟着敲两边
var add(c,d){
return this.a+this.b+c+d
}
var obj={a:1,b:2}; Function.prototype.es6Call=function(context)
{
var context=context || window;
context.fn=this;
var args=[];
for (var i=1,len=arguments;i<len;i++){
args.push(arguments[i]);
}
return context.fn(...args);
} //调用
add.es6Call(obj,3,4); //结果:10

3、思考

在网上看到这样的一种语句
function fn1(){
console.log("这是FN1");
}
function fn2(){
console.log("这是FN2");
} //第一种:
fn1.es6Call(fn2); //结果: 这是FN1
分析:this本身指向的是fn1,fn1本身就是一个函数方法,那么就确定context.fn=fn1,所以无论是否有其他参数,那么都会执行fn1这个函数
//第二种:
fn1.es6Call.es6Call(fn2); //结果: 这是FN2
分析:在调试过程中,context 指向的是 fn2, 但是 context.fn=this(此时,this就是 fn1.es6Call)这句话,让context.fn(...args) 返回值为undefine,也就是说this=fn.es6Call只是指向Funtion.prototype.es6Call本身,仅仅表示对象 //有人会想,执行 fn1.es6Call().es6Call() //结果:报错

  

  

  

最新文章

  1. NOIP 2005 过河
  2. arcsde service(esri_sde)服务启动后又停止
  3. HashMap Hashtable ArrayList HashSet
  4. Android开源项目 Universal imageloader 源码研究之Lru算法
  5. 文本导出到pdf文件
  6. DedeCMS织梦文章内容图片绝对路径修改方法
  7. Longest Palindromic Substring - 字符串中最长的回文字段
  8. MFC使用SQLite 学习系列 二:无法容忍的数据插入效率
  9. eclipse java formater 配置详解
  10. MySQL查看SQL语句执行效率
  11. python_flask 基础巩固 (URL传输传递方式)
  12. 黄聪:HBuilder左侧项目管理器如何不与标签页一起自动切换
  13. appium桌面版本以及一些自动化测试方方封装
  14. 执行了‘“npm install mysql&quot;
  15. 系统的Drawable(二)-Selector
  16. 委托、Lambda表达式、事件系列07,使用EventHandler委托
  17. Jmeter参数化与检查点
  18. 使用ffmpeg的av_read_frame,如何控制连接超时
  19. 安装 ORACLE 11G出现Error Message:PRVF-7535
  20. 【OCP-12c】2019年CUUG OCP 071考试题库(79题)

热门文章

  1. Qt类关系一览表
  2. EditText限制输入的几种方式及只显示中文汉字的做法
  3. 001 安装mysql
  4. IM 简介
  5. ISO/IEC 9899:2011 条款6.7.8——类型定义
  6. vue plupload 的使用
  7. 004-行为型-11-解析器模式(Interpreter)
  8. 新检出普通web项目爬坑记【我】
  9. 报错:Error, CM server guid updated, expected xxxxx, received xxxxx (未解决)
  10. pix2pix&amp;Cycle GAN&amp;pix2pix HD