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一切皆为对象,但函数是最特别的对象。

  • 相关阅读:
    prototype.js超强的javascript类库
    MySQL Server Architecture
    Know more about RBA redo block address
    MySQL无处不在
    利用Oracle Enterprise Manager Cloud Control 12c创建DataGuard Standby
    LAMP Stack
    9i中DG remote archive可能导致Primary Database挂起
    Oracle数据库升级与补丁
    Oracle为何会发生归档日志archivelog大小远小于联机重做日志online redo log size的情况?
    Oracle Ksplice如何工作?How does Ksplice work?
  • 原文地址:https://www.cnblogs.com/zx192664369/p/8572130.html
Copyright © 2011-2022 走看看