Javascript 追本溯源

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

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

       以下列举一下表过程:java

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

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

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

4.为作好数据共享,增长了prototype。ide

 

说说继承,为了学习继承,编写了以下脚本函数

 

javascript中的数据继承是经过_proto_ chain来实现的学习

javascript中继承机制的实现:this

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>
相关文章
相关标签/搜索