zoukankan      html  css  js  c++  java
  • Javascript 追本溯源

           一直以来对Javascript的继承关系都是通过死记硬背下来的,对于一个理科生,喜欢逻辑思维的人来讲,死记硬背特别头痛,且理科生对于能够死记硬背下来的东西也很容易忘记,不知道其他理科生童鞋们是否如此,长时间发现,我是这样的,喜欢逻辑性的东西, 不太喜欢死记硬背。最近看过篇文章《Javascript继承机制的设计思想》(原文地址),

      原文写的很好,当中讲了Javascript的继承产生思路。

           如下列举一下表过程:

    1.1994年,网景公司(Netscape)发布了Navigator浏览器0.9版,可以浏览网页了(无前段交互,无网页互动)。

    2.工程师Brendan Eich负责开发这种新语言(使得浏览器可以与网页互动的网页页脚本语言)

    3.在其他面向对象的语言的影响下,设计了继承机制(为了降低难度,没有引入“类”的概念,使用了概念有:构造器constructor,new)

    4.为做好数据共享,增加了prototype。

    说说继承,为了学习继承,编写了如下脚本

    javascript中的数据继承是通过_proto_ chain来实现的

    javascript中继承机制的实现:

    JavaScript中的原型(prototype)是和函数(function)紧密相连的,因为每个函数默认都会有一个属性叫prototype, 每一个通过函数和new操作符生成的对象都具有一个属性__proto__, 这个属性保存了创建它的构造函数的prototype属性的引用。这个__proto__对象就是实现原型链的核心对象。JavaScript是一门面向对象的编程语言,它的继承特性其实就是通过原型链机制来实现的。同时,instanceof运算符也需要在原型链的支持。”

    写了一段代码如下:

    <script>
            function Person(name){
                this.name = namel;
            }
    
            alert(Person instanceof Object);//true  
    
            //方式一
            Person.prototype.species = "ABC";
            Person.prototype.DoHardWork = function () {
                alert(this.species);
            }
            //方式二:两种方式等价,但有区别
            Person.prototype = {
                species: "ABC",
                DoHardWork: function () { alert(this.species) }
            };//相当于 Person.prototype  = new Object({……});所以,Person.prototype.constructor === Object;
            Person.prototype.constructor = Person;//有利溯源查看Person这个原型,
    
            var father = new Person("张三");//father 中有 __propotype__属性,指向了Person.prototype;
            var uncle = new person("张四");
    
            var Son = function (name) { this.name = name; };
    
            Son.prototype = father;
            son.prototype.constructor = Son;
    
            var son1 = new Son("张小三");//son1中__propotype__指向了father,father 中有 __propotype__属性,指向了Person.prototype;
            /*
            查看Son: son1.constructor;
            查看Person:son1.constructor.prototype.constructor,//如果没有 Person.prototype.constructor = Person;这句话,就不能获取到Person
    
    
            通过new生成的对象的Constructor找构造对象,通过构造对象(也是函数)获取继承的Prototype对象,通过Prototype对象的Constructor获取原函数。
            */
        </script>
  • 相关阅读:
    C#结构
    R语言快速入门
    C#_枚举类型
    C#_数组
    C#传递参数
    C#_字符串的操作
    python-函数之命名空间作用域
    python-迭代器和生成器
    python-文件操作
    python
  • 原文地址:https://www.cnblogs.com/beixing/p/3853235.html
Copyright © 2011-2022 走看看