Javascript 精髓整理篇(二)postby:http://zhutty.cnblogs.com

  今天是2015-11-25,今天做了件很傻逼的事。在此向各位网友告诫,有时候做事宁愿武断也不要犹豫,犹豫是万恶之源,是失败之母。在此,向灿和说声抱歉。机会只有一次,且行且珍惜。

  废话不多讲了,开篇吧。今天总结的内容是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的方法。

好了,基本的就是这样,接下来看看重头戏,this。先看个栗子。我故意写成栗子。

var a = {
    a1 : "this is a1",
    getA1: function(){alert(this.a1);},
    getThis:function(){console.log(this)}
}
a.getA1()//输出this is a1
a.getThis()//输出a的所有内容
function A(){
    console.log("this is A->this",this)
   function aa(){
       console.log("this is aa->this",this)
   }
}
    var a1 = new A()//这里会输出"this is A->this"
    a1.aa()//这里会报undefined

/*******这是华丽的分割线    [email protected]***********/

function A(){
    console.log("this is A->this",this)//这里的this和下面的aa里面的this是一样的
   this.aa = function(){
       console.log("this is aa->this",this)
   }
}
    var a1 = new A()//这里会输出"this is A->this"
    a1.aa()//这里会报这样才会输出"this is aa->this"

/************[email protected]******************/

function A(){
    this.Att = "this is A this Att"

   this.aa = function(){
       this.aat = "this is aat"
       console.log(this.aat)//输出this is aat
       console.log(his.Att)//输出this is A this Att
   }
   console.log("this is A->this",this.aat)//这里是undefined
}
    var a1 = new A()//这里会输出"this is A->this"
    a1.aa()//这里会报这样才会输出"this is aa->this"

/*********====================**********/
function A(){
    this.aat = "this is A this aat A"
       this.aa = function(){
       this.aat = "this is aat aa"
       console.log("this is aa->this",this.aat)//输出aa()里面的this is aat aa
   }
}
    var a1 = new A()//
    a1.aa()//

总结就是,this 由外向里传递,不可逆向,然优先级是由内向外,里面的this取值会优先于外边的。

这个代码不规范,别学。正规编码可要写好。先这样吧。

原创作品,转载请注明出处。http://zhutty.cnblogs.com

时间: 2024-10-10 22:38:21

Javascript 精髓整理篇(二)postby:http://zhutty.cnblogs.com的相关文章

JavaScript 精髓整理篇(一)postby:http://zhutty.cnblogs.com

废话篇头: 由于工作关系,所以写博文的时间有那么点~~,其实是输入法太懒了,都是输入法的错~~ 这一系列的博客将总结所有关于JavaScript语言的精髓,适合0基础到大师级别人物阅读. <JavaScript 精髓整理篇>将系统整理Javascript语言精要.欢迎们加入我信息栏中的qq群,我们可以一起探讨.qq群:164858883 精华不容错过: 随着nodejs的火爆,以及移动开发的热潮,js的地位已经火速上涨. JavaScript 精要可以从下面11个关键类型入手:Object.A

Javascript 精髓整理篇之三(数组篇)postby:http://zhutty.cnblogs.com

今天双十二,本又是剁手的一天.不知道今天为什么,好像很多感慨.工作快两年了,感觉时间好快.没有存款.....>_< 算了,进入正题吧.今天讲js的数组.数组是js中最基础的数据结构了. 主要讲讲数组实现栈,队列以及其他的基本操作.栈和队列都可以在数组头尾位置处理,所以,都有两种方式. 属性 1.length : 长度,表示数组元素的个数. 方法 1.实现栈,先进后出. 入栈:Array.unshift(obj) 在数组第一个元素插入数据 出栈:obj = Array.shift() 取出第一个

JavaScript笔记基础篇(二)

基础篇主要是总结一些工作中遇到的技术问题是如何解决的,应为本人属于刚入行阶段技术并非大神如果笔记中有哪些错误,或者自己的一些想法希望大家多多交流互相学习. 1.ToFixed()函数 今天在做Birt报表时, 要显示一列百分比的数据,但因一些特别的原因,不能使用使用百分比样式,即如果数据是0.9538不能显示成“95.38%”的样式,必须显示成“95.38”. 开始时想使用javascript的内置函数Math.round(),可Math.round()只能显示为整数,而不能保留小数. 再网上搜

《你不知道的JavaScript》整理(二)——this

最近在读一本进阶的JavaScript的书<你不知道的JavaScript(上卷)>,这次研究了一下“this”. 当一个函数被调用时,会创建一个活动记录(执行上下文). 这个记录会包含函数在哪里被调用(调用栈).函数的调用方法.传入的参数等信息. this就是记录的其中一个属性,会在函数执行的过程中用到. this既不指向函数自身也不指向函数的作用域. this实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用. 一.调用位置 调用位置就在当前正在执行的函数的前一个调用中

轻量级mvvm Web开发框架 postby:http://zhutty.cnblogs.com

今天特别郁闷,怎么说呢,之前一直就用angular,然后这两天在入职,我们公司用的是avalon这东西,反正,一开始没时间去玩它,第一个任务就是封装个jq插件,实现一个小功能.反正呢,就是越写越郁闷.用过angular的同学在去用jq应该都会有这种感觉吧.多此一举,费事.主要是,jq去一个一个操作dom树,把我搞郁闷了,最后,插件好了,但在一个地方用了好几次,这下好了,出问题了.问题像是这样的,晒出来供大家吐槽. $.fn.PlaginName = function($){ //这个插件实现的内

javascript精髓篇之原型链维护和继承.

一.两个原型 很多人都知道javascript是原型继承,每个构造函数都有一个prototype成员,通过它就可以把javascript的继承演义的美轮美奂了.其实啊,光靠这一个属性是无法完成javascript的继承.我们在代码中使用的prototype完成继承在这里就不多说了.大家可以查一下资料.另外一个看不见的prototype成员.每一个实例都有有一条指向原型的prototype属性,这个属性是无法被访问到的,当然也就无法被修改了,因为这是维护javascript继承的基础. 1 //构

【Linux】鸟哥的Linux私房菜基础学习篇整理(二)

1. dumpe2fs [-bh] devicename:查询superblock信息.参数:-b:列出保留为坏道的部分:-h:列出superblock的数据,不会列出其他的区段内容. 2. df [-ahikHTm] 目录或文件名:列出文件系统的整理磁盘使用量.参数:-a:列出所有的文件系统,包括系统特有的/proc等文件系统:-k:以KB的容量显示各文件系统:-m:以MB的容量显示各文件系统:-h:以人们易阅读的GB.MB.KB等格式自行显示:-H:以M=1000K替代M=1024K的进位方

《高性能javascript》 领悟随笔之-------DOM编程篇(二)

<高性能javascript> 领悟随笔之-------DOM编程篇二 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整个页面文档.DOM编程性能一直以来都是非常受开发者关注的话题,如何编写高性能的DOM是前端开发必不可少的技能. 1.重绘与重排 当浏览器加载完页面所有的元素.js.css.图片之后会自动生成两个数据结构: 1.dom树 (图片为转载) 如图所示,dom树表示了整个页面文档的结构,通过访问dom树我们可以得到某

SQL Server调优系列基础篇(并行运算总结篇二)

原文:SQL Server调优系列基础篇(并行运算总结篇二) 前言 上一篇文章我们介绍了查看查询计划的并行运行方式. 本篇我们接着分析SQL Server的并行运算. 闲言少叙,直接进入本篇的正题. 技术准备 同前几篇一样,基于SQL Server2008R2版本,利用微软的一个更简洁的案例库(Northwind)进行解析. 内容 文章开始前,我们先来回顾上一篇中介绍的并行运算,来看文章最后介绍的并行运算语句: SELECT B1.[KEY],B1.DATA,B2.DATA FROM BigTa