前端学习 第二弹: JavaScript中的一些函数与对象(1)

1.apply与call函数

每个函数都包含两个非继承而来的方法:apply()和call()。
他们的用途相同,都是在特定的作用域中调用函数。
接收参数方面不同,apply()接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。
call()方法第一个参数与apply()方法相同,但传递给函数的参数必须列举出来。

举个例子:

function Person(name,age){this.name=name;this.age=age;}/*定义一个学生类*/
function Student(name,age,grade){Person.apply(this,arguments);this.grade=grade;}var student=new Student("Song",22,"大4");
alert("name:"+student.name+"\n"+"age:"+student.age+"\n"+"grade:"+student.grade);

var MyName={firstName:"Song",lastName:"Haolun"};function ask(){console.log("Hey,"+this.firstName+" "+this.lastName+" ,Can you hear me?");
}
ask.call(MyName);

在给对象参数的情况下,如果参数的形式是数组的时候,比如apply示例里面传递了参数arguments,这个参数是数组类型,并且在调用Person的时候参数的列表是对应一致的(也就是Person和Student的参数列表前两位是一致的) 就可以采用 apply , 如果我的Person的参数列表是这样的(age,name),而Student的参数列表是(name,age,grade),这样就可以用call来实现了,也就是直接指定参数列表对应值的位置(Person.call(this,age,name,grade));

2.argument

arguments 是一种本地、类数组的对象的名称,它存在于每个函数中。 因为生僻,经常被人们忽略,但却是许多魔术般的程序之源。 所有主流 js 库都汲取了 arguments 对象的力量。 它是每一个 javascript 程序员都应当熟知的东西。

在任何函数的内部,你都可以通过变量 “arguments” 访问到它,它是一个包含了该函数被调用时提供的所有实参的“数组”。 但事实上,它并不是一个真正的数组—— typeof arguments 时会返回“object”。 你可以通过数字索引(index)的方式来访问 arguments 中的各个值,它也有和数组一样的 length 属性, 但没有如 pushpop 之类的数组的方法。

arguments.callee 包含一个创建 arguments 对象本身的函数的引用用argument.callee实现的隔4秒弹出一个对话框

 1 function repeat(fn, times, delay) {
 2     return function() {
 3         if(times-- > 0) {
 4             fn.apply(null, arguments);
 5             var args = Array.prototype.slice.call(arguments);
 6             var self = arguments.callee;
 7             setTimeout(function(){self.apply(null,args)}, delay);
 8         }
 9     };
10 }
11
12
13 function comm(s){
14   alert(s);
15   }
16 var Sm=repeat(comm,3,4000);
17 Sm("Can you hear me?");

转载于:https://www.cnblogs.com/Ccf-SongHaoLun/p/6028310.html

前端学习 第二弹: JavaScript中的一些函数与对象(1)相关推荐

  1. 前端学习第二弹:target属性

    今天被<a>标签的target属性着实打击了一把,怪我想太多,没有从局部钻出来~~~ 之前用的基本上就是那四个常见属性_blank,_self,_parent以及_top,关于这四大金刚大 ...

  2. web前端学习笔记之JavaScript

    文章目录 1 JavaScript简介 2 JS基础 3 JS代码编写位置 3.1 行内式 3.2 内嵌式 3.3 外联式 4 基本语法 5 字面量和变量 5.1 字面量 5.2 变量 6 标识符 7 ...

  3. name optimize is not defined 怎么解决_Web前端:怎么在JavaScript中比较对象?

    大家好,我来了,本期为大家带来的前端开发知识是"Web前端:怎么在JavaScript中比较对象?",有兴趣做前端的朋友,一起来看看吧! 比较JavaScript中的原始值很简单. ...

  4. 好程序员web前端学习路线分享css3中的渐进增强和降级

    好程序员web前端学习路线分享css3中的渐进增强和降级,渐进增强和降级这两个概念是在 CSS3 出现之后火起来的.由于低级浏览器不支持 CSS3,但是 CSS3 特效太优秀不忍放弃,所以在高级浏览器 ...

  5. 来一轮带注释的demo,彻底搞懂javascript中的replace函数

    javascript这门语言一直就像一位带着面纱的美女,总是看不清,摸不透,一直专注服务器端,也从来没有特别重视过,直到最近几年,javascript越来越重要,越来越通用.最近和前端走的比较近,借此 ...

  6. JavaScript中语句与函数的执行辨析

    文章出自个人博客https://knightyun.github.io/2018/05/23/js-anonymous-function,转载请申明. Javascript代码中,语句和函数以及匿名函 ...

  7. 彻底搞懂javascript中的replace函数

    javascript这门语言一直就像一位带着面纱的美女,总是看不清,摸不透,一直专注服务器端,也从来没有特别重视过,直到最近几年,javascript越来越重要,越来越通用.最近和前端走的比较近,借此 ...

  8. JavaScript中的工厂函数vs构造函数vs class

    原文链接:JavaScript Factory Functions vs Constructor Functions vs Classes 作者:Eric Elliott 译者:sunny 转载需提前 ...

  9. 理解javascript中的回调函数(callback)【转】

    在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...

  10. 深入认识javascript中的eval函数

    来源:http://wanyij.blog.51cto.com/46570/43794 发现为本文起一个合适的标题还不是那么容易,呵呵,所以在此先说明下本文的两个目的: (1)介绍javascript ...

最新文章

  1. boost::noncopyable介绍
  2. 桶排序python实现
  3. 2、ALTER TABLE:修改数据表
  4. iOS之播放音效(AVFoundation)
  5. 大学生试用期辞退之没有工钱
  6. SAP Spartacus 默认路由配置的工作原理
  7. 深入浅出Google Android这本书怎么样
  8. 循环给对象创建属性名和属性值
  9. Redis的管道pipeline
  10. 数据科学 IPython 笔记本 9.2 NumPy 简介
  11. c语言第八周上机作业答案,C语言第五次上机作业参考答案
  12. 如何制作图书专用标签
  13. IR2104/03 TLP250
  14. 黄金短线交易技巧是什么?
  15. html中闰年的计算方法,什么是闰年(怎么计算)
  16. NADH二钠CAS 606-68-8的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  17. 全新安装Windows10系统(PE下)
  18. 手把手教你solidworks重力下落物体动画制作
  19. 动态规划多边形游戏c语言,动态规划-多边形游戏问题
  20. 技术人员也要注重提升软实力

热门文章

  1. Operations map 运营图谱
  2. CF932E Team Work
  3. 圣地牙哥『华南理工大学南加州校友会』理事会全体理事及部份校友聚会纪实...
  4. 2018.1.30-31 开始racket,避免mutation,lazy evaluation
  5. Drop user 报ORA-00600 [KTSSDRP1]
  6. Android判断App是否在前台运行
  7. Spark 学习(三) RDD基本介绍
  8. eclipse迅速新建main函数
  9. Vue使用Mint-ui的Popup, Picker组件报错问题
  10. @Value属性配置 以及 spring boot1.5以上版本@ConfigurationProperties取消location注解后的替代方案...