锁定老帖子 主题:javascript函数--类的认识
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-06
最后修改:2009-01-06
javascript的出现,在很长的一段时间里,只是充当表单验证之类的一些琐碎事情,通过减少提交数据的错误率来提高网络操作效率。随着ajax的出现和兴盛起来,基于web的应用程序迎来了一次转机,“富客户端”一词与web应用的联系开始流行起来,随之而来的是javascript受到了极大的重视,各种框架层出不穷。
个人专门去查看学习了网上的不少资料,现将所得整理出来以便随时查阅。 [b]函数的理解:[/b] “面向对象编程(oop)”的概念随着C++、C#和JAVA的兴起而声明远播,javascript处于一些***?的考虑,硬是要与“面向对象”拉扯上亲戚,号称基于对象的编程语言(感觉不伦不类)。\r\n 在“面向对象语言”中都有“类”这个概念,它是对具有一些相同状态(属性)和行为(方法)的事物的抽象,就是说满足这个类的事物都具有一定的共性。而在javascript中,类对应的是函数。
函数的创建 函数的创建和定义是灵活多变的(换个角度也可以说是混乱的),归类如下: 1、定义方式创建函数 function aFunc(x){ return x; } 2、声明方式创建函数 var aFunc= function(x){ return x; } 3、用Function构造函数创建(不常用到的),参数名和函数体都是作为字符串被传递。我们可以随意的增加参数,函数体会最后一个字符串(如果没有参数,只写函数体)。函数体没必要将都写在一行里,可以使用\或者使用字符串连接符+来分隔长代码(\标记告诉JavaScript在下一行查找字符串的其余部分)。 var aFunc = new Function("x","return x;"); var aFunc = new Function("a", "b", "alert" + "(a+' + ' +b);\ return a+b;"); alert(aFunc(3,4)); Function创建的函数不会被编译,要到运行时才会编译创建,这样可能会影响效率。另两种方式创建的函数会被编译,调用的时候直接执行。 用以上这三中方式创建的函数,其中声明方式(Function构造函数方式)和定义方式存在差别: 有同名函数时如( var func = function(){return 1;} func(); //返回1 var func = function(){return 2;} func(); //返回2 两个调用分别返回1,2 function func(){ return 1;} func(); function func(){ return 2;} func(); 两个调用都返回2 ) 这种差别是由于JavaScript解释引擎的工作机制所导致的。 JavaScript解释引擎在执行任何函数调用之前,首先会在全局作用域中注册以定义方式创建的函数(后 定义的函数重写了先定义的函数),然后再依次执行函数调用。相反,对于声明方式创建的函数,JavaScript解释引擎会像对待任何声明的变量一样,等到执行调用时才会对变量求值。由于JavaScript代码是从上到下顺序执行的,因此当执行第一个func()调用时,func函数的代码就是首先定义代码;而当执行第二个func()调用时,func函数的代码又变成了后来定义的代码。
函数的封装 function ObjectTest(){ //全局的属性和方法,可以理解为public this.lastLoginTime = new Date(); this.theDate = function(){ alert(this.lastLoginTime.getMonth()+"_"+this.lastLoginTime.getDate()); }
//私有的属性和方法,可以理解为private var lastLoginTime1 = new Date(); var theDate1 = function(){ alert(this.lastLoginTime.getMonth()+"_"+this.lastLoginTime.getDate()); } }
每个javascript函数都有一个属性--prototype,可以通过这个属性给函数添加全局的属性和方法。 //public方法,对于全局的方法和属性可通过对象进行调用 ObjectTest.prototype.getYear = function(){ return '2009';//this.lastLoginTime.getYear(); }
//静态方法,对于静态方法的调用:typeName.methodName(),不可以通过对象调用 ObjectTest.getMonth = function(){ return '01'; }
未完待续!整理的过程是一个学习的过程,发出来希望大佬们补充,只要是有意义的,板砖也行。
关于javascript函数,下面有一篇不错的文章: 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-01-07
最后修改:2009-01-07
关于JS的this关键字,我一直是半知半解
this.theDate = function(){ alert(this.lastLoginTime.getMonth()+"_"+this.lastLoginTime.getDate()); } 这里的两个this的区别最好讲下。(是不是因为后者是声明,所以this仍然是父一级的this?) |
|
返回顶楼 | |
发表时间:2009-01-07
最后修改:2009-01-07
liuchong14 写道 关于JS的this关键字,我一直是半知半解
this.theDate = function(){ alert(this.lastLoginTime.getMonth()+"_"+this.lastLoginTime.getDate()); } 我的理解是: 这里的两个this的区别最好讲下。(是不是因为后者是声明,所以this仍然是父一级的this?) 这里的两个this都是值函数ObjectTest的一个实例。同一级的吧。具体的区别是:前面的this可以使属性和方法成为类似java里面的public型 |
|
返回顶楼 | |
发表时间:2009-01-07
学习脚本也有半年了,我怎么就看不懂你写的东西是什么呢。。
|
|
返回顶楼 | |
发表时间:2009-01-08
ahrhu 写道 学习脚本也有半年了,我怎么就看不懂你写的东西是什么呢。。
有一些地方用到了java的术语,javascript不是号称“基于对象”么?那就向对象的标准看其了。。。 |
|
返回顶楼 | |
发表时间:2009-01-19
其实可以看看周爱民的书
这里讲的 基本上都进行了深入的分析了 |
|
返回顶楼 | |
浏览 2982 次