Javascript 精髓整理篇之二(函数篇)postby:http://zhutty.cnblogs.com
今天总结的内容是javascript的function, 涉及到function顺便讲讲this.
Function 是javascript的函数,也是js的执行单元。函数是JavaScript的一种基本数据类型。注意,虽然可以用这里介绍的Function()构造函数创建函数对象, 但这样做效率不高,在大多数情况下,建议使用函数定义语句或函数直接量来定义函数。
在JavaScriptl.1及以后版本中,函数主体会被自动地给予一个局部变量arguments,它引用一个Arguments对象。该对象是一个数组,元素是传递给函数的参数值。不要将这一属性和上面介绍的反对使用的属性argumentsl)相混淆。详见“Arguments”的参考页。
属性:arguments 需要注意的是,这里是传入的实参的值。
arguments[] : 这个属性呢存储的是function的参数列表。 arguments属性的值为Object类型,返回正在执行的当前函数的arguments对象。 arguments对象包含调用该函数时所传入的实际参数信息,例如:参数的个数和参数的值。我们可以通过arguments属性让函数处理可变数量的参数。 arguments对象有以下三个属性: length属性,返回实际传入的参数个数。
callee属性,返回当前函数的引用(匿名函数可以使用该属性实现递归调用)。
0...n属性,以顺序索引访问传入的具体参数。例如,使用arguments[0]可以访问传入的第1个参数,arguments[1]可以访问传入的第2个参数
属性:caller 这个属性呢,是表示哪个函数调用当前函数。
<script>
function displayDate(a,b,c,d)
{
hehe()
console.log(displayDate.arguments);
}
function hehe(){
alert(hehe.caller);//这里会输出displayDate函数的内容
alert("hehe1");
}
</script>
属性 : length 这个属性表示函数定义形参的数量
function displayDate(a,b,c)
{
alert(displayDate.length)//这里将会输出3,表示函数的形参的数量
console.log(displayDate.arguments);
}
属性 :prototype 这个是函数里边很重要,是一个对象,用于构造函数,这个对象定义的属性和方法由构造函数创建的所有对象共享。
function displayDate(a,b,c)
{
console.log(displayDate.prototype)//这里将会输出函数的信息,注意输出结果的prototype属性
//console.log(displayDate.arguments);
}
以上执行结果:
仔细的同学就会发现,prototype是无限的,这就是javascript的一个语言特性,叫做原型链。javascript实现继承,就可以通过这个机制实现。如:
function A(){
this.a=function(){
alert("a")
}
}
function B(){
this.b=function(){
alert("b")
}
}
B.prototype = new A();//这样B就继承了A
var bb = new B();
bb.a()//输出a
这里插播个插曲,当年去歪~面试,那面试官问我js的超类是什么,我说是Object, 他说是prototype,我也是醉了,哎!!!也是个悲剧时代!!
prototype本身就是一个Object对象。
属性 :name, 这个属性比较简单,就是函数名,是一个字符串类型。
接下来,我们来看看Function的方法吧。
方法:toString() 这个是object的方法,所以,不介绍这个吧,重点是call和apply这两个一起介绍吧。
方法:call 和 apply 这两个都可以用来实现继承,将函数作为指定对象的方法来调用。加prototype一个,js有三种方式实现继承。
call 和 apply的区别的,除了拼写不一样,就剩参数的形式不一样了。apply需要用数组传入参数,而call则没有这个限制。说这些可能大家还是云里雾里的,举个’栗子‘吧。
function A(p1){
alert(p1) //会输出“oooo”
this.a=function(p2){
alert(p2)//会输出“hehe”
}
}
function B(){
//A.call(this,"oooo")//“oooo"是A的构造器的参数
A.apply(this,["oooo"])//"oooo"是A的构造器的参数
this.b=function(){
alert("b")
}
}
var bb = new B();//这个new很重要,没有new下面的不能输出"hehe"
bb.a("hehe")//输出a
我简单的写了一下,不造你们看懂没。这里实现的是B继承A。所以最后的bb可以调用A的方法。
原创作品,转载请注明出处。http://zhutty.cnblogs.com
Javascript 精髓整理篇之二(函数篇)postby:http://zhutty.cnblogs.com的更多相关文章
- JavaScript 精髓整理篇之一(对象篇)postby:http://zhutty.cnblogs.com
废话篇头: 由于工作关系,所以写博文的时间有那么点~~,其实是输入法太懒了,都是输入法的错~~ 这一系列的博客将总结所有关于JavaScript语言的精髓,适合0基础到大师级别人物阅读. <Ja ...
- Javascript 精髓整理篇之三(数组篇)postby:http://zhutty.cnblogs.com
今天讲js的数组.数组是js中最基础的数据结构了. 主要讲讲数组实现栈,队列以及其他的基本操作.栈和队列都可以在数组头尾位置处理,所以,都有两种方式. 属性 1.length : 长度,表示数组元素的 ...
- 《前端之路》- TypeScript(二) 函数篇
目录 一.定义函数方法 二.定义函数传参 三.可选传参 四.默认传参 五.传递剩余参数 六.函数重载 七.箭头函数 八.总结 一.定义函数方法 在 es5 中定时函数的方法有 命名函数和函数表达式(匿 ...
- Kotlin——高级篇(二):高阶函数详解与标准的高阶函数使用
在上面一个章节中,详细的讲解了Kotlin中关于Lambda表达式的语法以及运用,如果还您对其还不甚理解,请参见Kotlin--高级篇(一):Lambda表达式详解.在这篇文章中,多次提到了Kotli ...
- JavaScript进阶之高阶函数篇
JavaScript进阶之高阶函数篇 简介:欢迎大家来到woo爷说前端:今天给你们带来的是JavaScript进阶的知识,接下来的系列都是围绕着JavaScript进阶进行阐述:首先我们第一篇讲的是高 ...
- 《高性能javascript》 领悟随笔之-------DOM编程篇(二)
<高性能javascript> 领悟随笔之-------DOM编程篇二 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...
- 工作经常使用的SQL整理,实战篇(二)
原文:工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实战篇,地址一览: 工作经常使用的SQL整理,实战篇(一) 工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实 ...
- [SQL SERVER系列]工作经常使用的SQL整理,实战篇(二)[原创]
工作经常使用的SQL整理,实战篇,地址一览: 工作经常使用的SQL整理,实战篇(一) 工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实战篇(三) 接着上一篇“工作经常使用的SQL整 ...
- JavaScript系列:高级函数篇
前言: 本篇主要是介绍 JavaScript使用函数的高级方法,函数是JavaSCript中最有趣的部分,利用Function特性可以编写出很多非常有意思的代码,本篇主要包括:函数回调,高阶函数以及函 ...
随机推荐
- hdu 2189
//hdu2189 题意大概就是给n个人,分成多组,要求每组人数都是素数,求有多少种... 解法就是先把150以内的素数全部存入一个数组,然后利用a[j+b[i]]+=a[j];这道题一开始没理解 ...
- bootstrap字体图标
bootstrap字体图标 http://v3.bootcss.com/components/ <!DOCTYPE HTML> <html> <head> < ...
- 《Java编程思想》之重点笔记——多态性理解
Java中除了static方法和final方法(private方法本质上属于final方法,因为不能被子类访问)之外,其它所有的方法都是动态绑定,这意味着通常情况下,我们不必判定是否应该进行动态绑定— ...
- IIS与ASP.NET 通信机制深度剖析
IIS5.X缺点: ISAPI 动态连接库被加载到InetInfo.exe 进程中,它和工作进程之间是一种典型的跨进程通信方式,尽管采用命名管道,但是仍然会带来性能的瓶颈. 所有的 ASP.NET 应 ...
- Jquery+css实现图片无缝滚动轮播
Today,在XX学院的教学视频中,偶尔看到了Jquery+css实现图片无缝滚动轮播视频教程,虽然以前已写过类似的,但是我感觉他学的比较精简.为了方便以后做项目时直接拷贝,特地写出来,顺便和大家分享 ...
- oracle存储过程调试方法
PL/SQL中为我们提供了[调试存储过程]的功能,可以帮助你完成存储过程的预编译与测试. 点击要调试的存储过程,右键选择TEST 如果需要查看变量,当然调试都需要.在右键菜单中选择Add debug ...
- excel导出的集中情况
jsp 页面: 导出按钮: <form id="excel" name="exportForm" method="post" acti ...
- python的hashlib模块
# -*- coding: utf-8 -*- """python 的MD5 sha1 模块""" import hashlib #md5的 ...
- 浏览器d判断
1.判断浏览器类型 if navigator.userAgent.indexOf(”MSIE”)>0) {} //判断是否IE浏览器 if(isFirefox=navigator.userAge ...
- JQUERY1.9学习笔记 之基本过滤器(二) 等于选择器
等于选择器 :eq() 描述:选择与设定下标匹配的元素.jQuery( ":eq(index)" )jQuery( ":eq(-index)" ) <!D ...