zoukankan      html  css  js  c++  java
  • javascript学习感触

    从开始接触javascript到现在也有2个星期了吧,有很多感触,在这里分享些许。
    javascript虽然是面向对象的,但是在我前面的几篇“混乱中”,我也已经谈了自己的想法,我开始甚至抵触过这个语言,为什么这个语言也居然宣称自己是面向对象的呢?学习一个新的东西开始的时候都是很痛苦的,尤其是已经存在的一些概念或认识跟这个要学的东西向抵触的时候?有放弃的冲动和想法。
    我是一个不轻易放弃的人,即便是暂时接受不了,可能会放下一段时间,然后重新开始,也许这是我这些年一直惯用的方式,反复学习,断断续续的坚持,享受过程的折磨,每一次都希望比上一次进步一点,直到爱上他为止。
    爱上这个词我说的有点过了,折磨这个词,是我从“老鹰重生”这个寓言故事中摘出来的,我很喜欢这个预言故事,寓言故事往往是鼓舞人心的,给人力量的。但是这则预言,很真实,尤其是在这个社会中,要得到自己想要的东西,和学到自己喜欢的东西那要付出代价,经历一番痛苦。过程的艰辛会让人记得更牢,更牢。
    要没做,要么不做,这是我对自己的承诺,尽最大努力做好。
    javavascript中的匿名函数,原型,闭包,我觉得是非常重要的东西,如果将这些掌握了,那么javascript的主要内容已经没有问题了,然后就是CSS的内容了。
    每一门学科或者技术或者其他区别于其他的第一点就是有自己的专业术语,专有的领域(现在很多都是综合性)还有就是解决问题的方法.
    对于专业术语,先认真学习,然后用自己的话去解释,所谓先认识,后解释,然后应用,应用的过程就是用它自己的一些方法在它的一些领域中解决一些问题。
    在网络盛行的今天,搜索引擎发挥了很大的作用,让每个人都能快速的获取知识和解决问题,如何快速的获取以及如何快速的解决问题,这对一个人来说应该是一种新的能力,而我一直在思考。
    我总是这么的罗嗦,现在言归正传,说下我刚才提到的那几个吧。 
    匿名函数
    匿名函数就是一个没有具体名字的函数,还是通过例子去看吧。
    在javascript中我们一般用下面的方式声明函数:
    1,function double(x) { return 2 * x; }
    2,var double = new Function('x', 'return 2 * x;');
    3,var double = function(x) { return 2* x; }
    




    从这三种方式可以看出,都有一个名称可以定位该函数,而匿名函数的声明跟这个是有区别的,如下:
    (function(x, y){ alert(x + y); })(2, 3);
     
    匿名函数可以最为自执行函数和回调函数中(如果用过JQuery和其他框架,可以看到很多)

    闭包

    闭包是一个陌生的概念,用我自己的话就是在一个函数中又定义一个函数,并且将这个函数变量或者名称返回(当然也可以不返回,通过this指定),返回后原来的函数所占的资源并不释放,可以说是激活状态,比较拗口,看下面的例子:
    function f1(){ 
        var n=999;
    function f2()
    {     
      alert(n);  
    }   
     return f2;  
     }  
     var result=f1();  
    result(); // 999
     
    从这个函数就可以看到,在f1中,我们又定义了一个f2,然后将f2返回,返回后仍然可以访问定义在f1中的变量n,这也是闭包的一个作用,访问内部参数,如果里面对这个变量做了变化,那么访问的是这个变量的最终值。 

    function buildList(list) { var result = []; for (var i = 0; i < list.length; i++) { var item = 'item' + list[i]; result.push(function () { alert(item + ' ' + list[i]) }); } return result; } function testList() { var fnlist = buildList([1, 2, 3]); for (var j = 0; j < fnlist.length; j++) { fnlist[j](); } } testList();
     上面的这个就是闭包的一个用法,当调用fnlist[j]()的时候弹出的都是item undefined,原因就是i在返回后已经变成了3,而list[3]是不存在的。 
    原型

    原型其本质是一个对象,普通的实例对象没有本质上的区别。可以包含特定类型的所有实例的共享属性或者方法,每个JavaScript函数都有prototype属性,这个属性引用了一个对象,这个对象就是原型对象。原型对象初始化的时候是空的,我们可以在里面自定义任何属性和方法,这些方法和属性都将被该构造函数所创建的对象继承。
    下面的例子很直观的说明了这点。
    function User(name,age){//构造方法 this.name = name;//对象属性 this.age = age;} User.prototype.addr = '湖北武汉';//在原型中添加属性 User.prototype.show = function(){//在原型中添加方法 alert(this.name+'|'+this.age); };var user1 = new User('ZXC',22);//创建实例 var user2 = new User('CXZ',21);user1.show();//调用show()方法user2.show(); alert(user1.show == user2.show);//返回 true 说明show方法是共享的alert(user1.addr);//'湖北武汉' alert(user2.addr);//'湖北武汉' 
     通过原型,我们可以动态的扩展一个对象的功能,很多框架的功能,不知道是不是通过这种方式来呢?
    这些资料很多都是来自网上,感谢分享的人,同时将这些地址分享如下:
    http://bonsaiden.github.com/JavaScript-Garden/
    http://www.cnblogs.com/jsk540/archive/2010/10/26/1861630.html
    http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
    http://www.cnblogs.com/phpzxh/archive/2009/09/16/1568137.html
    http://www.cnblogs.com/chaofan/archive/2009/12/29/1635133.html
    http://kb.cnblogs.com/page/144404/
    http://blog.csdn.net/helloworl/article/details/7883507
    http://www.cnblogs.com/rainman/archive/2009/05/04/1448899.html#m1
  • 相关阅读:
    推荐一款国内首个开源全链路压测平台
    面试必备:接口自动化测试精选面试干货!
    测试开发:你所需要掌握了解的性能测试知识
    推荐一款自动化测试神器,不会写代码也能做!
    测试开发进阶:一文教你从0到1搞懂大数据测试!
    Java 在PPT中插入OLE对象
    Java 在Word中创建多级项目符号列表和编号列表
    C# / vb.net 给PDF 添加可视化和不可见数字签名
    Java 给Word添加印章
    Java 加载、操作和保存WPS文字文档
  • 原文地址:https://www.cnblogs.com/zuiyirenjian/p/2889495.html
Copyright © 2011-2022 走看看