zoukankan      html  css  js  c++  java
  • 悟透javascript-阅读记

    《悟透javascript》这本书以一种通俗易懂的幽默形式,讲述了es6之前版本的js精髓,也是大众吐槽的部分,因为

    js与很多语言很不一样,没有类,没有严格的类型,没有那么多界限,至有灵活的使用方式,有一种无论怎么编写代码

    都不会出错的感觉,而这一份灵活给有语言其他语言基础的人很大困扰,所以前端经常被自己嫌弃,因为js的不严谨。

    但我觉得这也是js简单之处。

    而这本书一直围绕一个中心述说。以下为它故事形式阐述中心的故事:

    在五祖弘忍讲授完《对象真经》之后的一天,他对众弟子们说: “经已讲完,想必尔等应该有所感悟,请各自写个偈子来看”。
    大弟子神秀是被大家公认为悟性最高的师兄,他的偈子写道: “身是对象树,心如类般明。朝朝勤拂拭,莫让惹尘埃! ”。
    此偈一出,立即引起师兄弟们的轰动,大家都说写得太好了。只有火头僧慧能看后,轻轻地叹了口气,又随手在墙上写道: “对象本无根,类型亦无形。本来无一物,何处惹尘埃? ”。
    然后摇了摇头,扬长而去。大家看了慧能的偈子都说: “写的什么乱七八糟的啊,看不懂”。师父弘忍看了神秀的诗偈也点头称赞,再看慧能的诗偈之后默然摇头。
    就在当天夜里,弘忍却悄悄把慧能叫到自己的禅房,将珍藏多年的软件真经传授于他,然后让他趁着月色连夜逃走...
    后来,慧能果然不负师父厚望,在南方开创了禅宗另一个广阔的天空。而慧能当年带走的软件真经中就有一本是《JavaScript 真经》! 
    他可理解为:
    理解 JavaScript,你得首先放下对象和类的概念,回到数据和代码的本原。编程世界只有数据和代码两种基本元素,而这两种元素又有着纠缠不清的关系。 JavaScript 就是把数据和代码都简化到最原始的程度。

    而我觉得里面述说的构造函数与原型很好,通俗易懂。

    构造对象:
    function MyFunc() {}; //定义一个空函数
    var anObj = new MyFunc(); //使用 new 操作符,借助 MyFun 函数,就创建了一个对象
    
    等价于:
    function MyFunc(){};
    var anObj = {}; //创建一个对象
    MyFunc.call(anObj); //将 anObj 对象作为 this 指针调用 MyFunc 函数
    原型:
    prototype 提供了一群同类对象共享属性和方法的机制.
    
    function Person(name)
    {
    this.name = name; //设置对象属性,每个对象各自一份属性数据
    };
    Person.prototype.SayHello = function() //给 Person 函数的 prototype 添加 SayHello 方法。
    {
    alert("Hello, I'm " + this.name);
    }
    var BillGates = new Person("Bill Gates"); //创建 BillGates 对象
    var SteveJobs = new Person("Steve Jobs"); //创建 SteveJobs 对象
    BillGates.SayHello(); //通过 BillGates 对象直接调用到 SayHello 方法
    SteveJobs.SayHello(); //通过 SteveJobs 对象直接调用到 SayHello 方法
    alert(BillGates.SayHello == SteveJobs.SayHello); //因为两个对象是共享 prototype 的 SayHello,所以显示:true
    
    而且原型的动态扩展性很棒。
    var BillGates = new Person("Bill Gates"); //建立对象
    BillGates.SayHello();
    Person.prototype.Retire = function() //建立对象后再动态扩展原型的方法
    {
    alert("Poor " + this.name + ", bye bye!");
    };
    BillGates.Retire(); //动态扩展的方法即可被先前建立的对象立即调用

    组合模式继承:

    原型链的访问方式和对象的覆盖性,可以实现层层向上访问自己的或父辈级以上的方法或属性,还有它的扩展功能。
    
    继承,共享方法与私有属性。
    function father() {
      this.a = 'father'  
    }
     
    father.prototype.b = function() {
       alert(this.a)
    }
     
    var child = function() {
      father.call(this)
    }
    child.prototype = new father();
    
    因为自身的属性会覆盖原型的属性,所以原型属性无法访问,
    而new的构造函数会被指派原型,然后被变量承接到,达到原型链的形成。
    这样实现继承的效果。
    
    对象间的方法是共享的,不会遇到垃圾回收问题,而且性能优于“闭包”模型。

    js一切皆为对象,但函数是最特别的对象。

  • 相关阅读:
    asp.net 发送邮件
    效控制C#中label输出文字的长度,自动换行
    无法连接到WMI 提供程序 请注意,你只能使用SQL Server 配置管理器来管理SQL Server 2005服务器。找不到指定的模块。[0x8007007e]
    查询区分大小写
    ASP.NET母版页引用外部css和js文件的写法
    VS2008 Debugging Breakpoint 补丁
    firefox下获得焦点
    IE打开出现windows找不到文件'(null)'解决方法Vinzipblog文之巴博客
    邪恶的web上下键焦点移动
    jQuery对下拉框Select操作总结
  • 原文地址:https://www.cnblogs.com/zhangzhicheng/p/8411226.html
Copyright © 2011-2022 走看看