js中的原型链

来源:互联网 发布:互联网过滤软件 编辑:程序博客网 时间:2024/04/30 22:45

1、声明方法:

<script type="text/javascript">    function Person(p_name){       this.name=p_name    }    //声明对象    var p1=new Person('zhangsan');    //为person类的对象 添加一个属性     Person.prototype.age=13;    //为对象添加一个speak方法    Person.prototype.speak=function(){        consoloe.log(this.name+'————'+this.name);    }    var p2=new Person('lisi');    var p3=new Person('xiaoqiang');</script>

其原理如下:
这里写图片描述

2、原型继承
所有类的父类都是object类
原型是一个对象,它是object类下的一个实例,
这里写图片描述

3、原型链:
什么叫原型链:
构造函数继承一个对象。
继承对象也有构造函数,其构造函数还去继承其他对象。
其他对象也有构造函数,构造函数还去继承其他对象。
其他对象也有构造函数,构造函数还去继承其他对象。
如此反复……..
形成了一个继承的链条,称为“原型链”,原型链的顶端是object。
这里写图片描述

4、对象访问一个成员顺序:
对象【本身】获取
对象【构造函数】里边获取
构造函数【继承对象】本身获取
构造函数【继承对象的构造函数】里边获取
构造函数继承对象构造函数继承对象的本身获取。。
构造函数继承对象构造函数继承对象的构造函数边里获取。。

5、原型衍生继承—复制继承
该继承在jquery框架有大量应用,该继承特点/好处:继承非常灵活,可以根据实际情况需要为对象去继承成员,如果有的对象不要额外成员,就不继承即可,同时,该继承允许同时继承多个对象。

<script type="text/javascript">    var dog={hobby:'看家护林',run:'在跑步'};    function Cat(){        this.mingzi='bosimao';        this.color='white';        this.leg=4;    }    Cat.prototype=dog;    var kitty=new Cat();    for(var k in kitty){        if (kitty.hasOwnProperty(k)) {             console.log('自己的:'+k+"————————"+kitty[k]);        }else{            console.log('继承的:'+k+"————————"+kitty[k]);        }    }    //原型衍生继承————复制继承    var cat1={color:'white',weapon:'伶牙俐齿',climb:function(){console.log('在跑步')}};    var seven={eye:'闪闪发光',tail:'笔直的尾巴'};    function Dog(){        this.color='gray';        this.leg=4;    }    //为dog原型添加自定义的方法    Dog.prototype.exx=function(obj){        for (var k in obj){            this[k]=obj[k];        }    }    //为自己添加自己属于自己的原来的属性 并且会覆盖掉    Dog.prototype.exx1=function(obj){        for (var k in obj){            if (this.hasOwnProperty(k)) {                this[k]=obj[k];            }        }    }    //为自己添加不属于自己的属性    Dog.prototype.exx2=function(obj){        for (var k in obj){            if (!this.hasOwnProperty(k)) {                this[k]=obj[k];            }        }    }    var black=new Dog();    //使得black对象继承cat对象    black.exx(cat1);    console.log(black);    var yellow=new Dog();    yellow.exx1(cat1);    console.log(yellow);    var red=new Dog();    red.exx2(cat1);    console.log(red);</script>
原创粉丝点击