前端学习 第二弹: JavaScript中的一些函数与对象(1)
前端学习 第二弹: 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
属性, 但没有如 push
和 pop
之类的数组的方法。
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)相关推荐
- 前端学习第二弹:target属性
今天被<a>标签的target属性着实打击了一把,怪我想太多,没有从局部钻出来~~~ 之前用的基本上就是那四个常见属性_blank,_self,_parent以及_top,关于这四大金刚大 ...
- web前端学习笔记之JavaScript
文章目录 1 JavaScript简介 2 JS基础 3 JS代码编写位置 3.1 行内式 3.2 内嵌式 3.3 外联式 4 基本语法 5 字面量和变量 5.1 字面量 5.2 变量 6 标识符 7 ...
- name optimize is not defined 怎么解决_Web前端:怎么在JavaScript中比较对象?
大家好,我来了,本期为大家带来的前端开发知识是"Web前端:怎么在JavaScript中比较对象?",有兴趣做前端的朋友,一起来看看吧! 比较JavaScript中的原始值很简单. ...
- 好程序员web前端学习路线分享css3中的渐进增强和降级
好程序员web前端学习路线分享css3中的渐进增强和降级,渐进增强和降级这两个概念是在 CSS3 出现之后火起来的.由于低级浏览器不支持 CSS3,但是 CSS3 特效太优秀不忍放弃,所以在高级浏览器 ...
- 来一轮带注释的demo,彻底搞懂javascript中的replace函数
javascript这门语言一直就像一位带着面纱的美女,总是看不清,摸不透,一直专注服务器端,也从来没有特别重视过,直到最近几年,javascript越来越重要,越来越通用.最近和前端走的比较近,借此 ...
- JavaScript中语句与函数的执行辨析
文章出自个人博客https://knightyun.github.io/2018/05/23/js-anonymous-function,转载请申明. Javascript代码中,语句和函数以及匿名函 ...
- 彻底搞懂javascript中的replace函数
javascript这门语言一直就像一位带着面纱的美女,总是看不清,摸不透,一直专注服务器端,也从来没有特别重视过,直到最近几年,javascript越来越重要,越来越通用.最近和前端走的比较近,借此 ...
- JavaScript中的工厂函数vs构造函数vs class
原文链接:JavaScript Factory Functions vs Constructor Functions vs Classes 作者:Eric Elliott 译者:sunny 转载需提前 ...
- 理解javascript中的回调函数(callback)【转】
在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...
- 深入认识javascript中的eval函数
来源:http://wanyij.blog.51cto.com/46570/43794 发现为本文起一个合适的标题还不是那么容易,呵呵,所以在此先说明下本文的两个目的: (1)介绍javascript ...
最新文章
- boost::noncopyable介绍
- 桶排序python实现
- 2、ALTER TABLE:修改数据表
- iOS之播放音效(AVFoundation)
- 大学生试用期辞退之没有工钱
- SAP Spartacus 默认路由配置的工作原理
- 深入浅出Google Android这本书怎么样
- 循环给对象创建属性名和属性值
- Redis的管道pipeline
- 数据科学 IPython 笔记本 9.2 NumPy 简介
- c语言第八周上机作业答案,C语言第五次上机作业参考答案
- 如何制作图书专用标签
- IR2104/03 TLP250
- 黄金短线交易技巧是什么?
- html中闰年的计算方法,什么是闰年(怎么计算)
- NADH二钠CAS 606-68-8的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 全新安装Windows10系统(PE下)
- 手把手教你solidworks重力下落物体动画制作
- 动态规划多边形游戏c语言,动态规划-多边形游戏问题
- 技术人员也要注重提升软实力
热门文章
- Operations map 运营图谱
- CF932E Team Work
- 圣地牙哥『华南理工大学南加州校友会』理事会全体理事及部份校友聚会纪实...
- 2018.1.30-31 开始racket,避免mutation,lazy evaluation
- Drop user 报ORA-00600 [KTSSDRP1]
- Android判断App是否在前台运行
- Spark 学习(三) RDD基本介绍
- eclipse迅速新建main函数
- Vue使用Mint-ui的Popup, Picker组件报错问题
- @Value属性配置 以及 spring boot1.5以上版本@ConfigurationProperties取消location注解后的替代方案...