美文网首页程序员
Javascript原型链和继承

Javascript原型链和继承

作者: 东方支柱 | 来源:发表于2020-06-08 15:49 被阅读0次
    原型链图

    实例化的对象拥有独立的一套属性和方法,举例如下:

    function Person(name){

            this. name=name;

            this. getName=function(){

                    return this. name;

            }

    }

    var p1=new Person("tom");

    var p2=new Person("alice");

    实例化的对象p1和p2拥有各自的name属性和getName方法,尽管这两个方法实现的功能一致。

    function Person(name){

            this. name=name;

    }

    Person.prototype. getName=function(){

            return this. name;

    }

    var p3=new Person("tom");

    var p4=new Person("alice");

    把getName方法定义到Person. prototype原型上,p3和p4拥有各自的属性name,同时共享相同的getName方法。

    同样的,若把属性定义到原型上,如Person. prototype. count=520; 则所有实例化的Person对象都可以访问人类数量,若新增一个实例修改count为521,所有的实例访问count时都显示521。

    访问一个对象的属性和方法时,系统会沿着原型链去寻找,先在对象的数据结构中找,若没有找到就到其原型对象中找,若还没找到,就到其原型对象的上一层原型对象去找,这就是继承。如图,Person原型对象的__proto__指向它的父类Object的原型对象。

    于是修改一个类Person原型对象的上一层原型对象为另外一个类Living原型对象,就实现了Person继承Living的目的。

    Person. prototype.__proto__=Living. prototype;

    如果Person原型对象中没有属性和方法,则直接将Person的原型对象改成Living的原型对象,也是可以的。

    Person. prototype=Living. prototype;

    同时更正原型对象的构造函数指向Person. prototype. constructor=Person;

    这样Living就成为Person的父类,也就是说Person继承了Living。

    相关文章

      网友评论

        本文标题:Javascript原型链和继承

        本文链接:https://www.haomeiwen.com/subject/qkhnzhtx.html