美文网首页
对象的创建与继承

对象的创建与继承

作者: 九又四分之三o | 来源:发表于2018-03-27 14:43 被阅读0次

    创建对象的几种方法

    1、字面量

    var o1 = {name:‘o1’}
    var o11 = new Object({name:‘o11’})
    

    2、通过构造函数

    var M = function(){this.name='o2'}
    var o2 = new M();
    

    3、Object.create

    var P = {name:'o3'}
    var o3 = Object.create(P)
    

    继承的几种方式

    1、构造函数

            function Parent1 (){
                this.name = 'parent1';
            }
            function Child1 (){
                Parent1.call(this);
                this.type = 'child1';
            }
            Parent1.prototype.say = function(){
                console.log("hi");
            }
            console.log(new Child1);
    

    缺点:1、只能部分继承,无法继承父类在原型链上的属性和方法

    2、借助原型链实现继承

            function Parent2 (){
                this.name = 'parent2';
                this.play = [1,2,3];
            }
            function Child2 () {
                this.type = 'child2';
            }
            Child2.prototype = new Parent2();
            console.log(new Child2);
    

    缺点:
    1、所有实例会共用其原型链上的方法,改变一个会影响另一个
    2、在创建 Child 的实例时,不能向Parent传参

    3、组合方式1

            function Parent3() {
                this.name = 'parent3';
                this.play = [1,2,3];
            }
            function Child3() {
                Parent3.call(this); //第一次执行
                this.type = 'child3';
            }
            Child3.prototype = new Parent3();   //第二次执行
            console.log(new Child3)
    

    缺点:父类构造函数重复执行了

    4、组合方式2

            function Parent4() {
                this.name = 'parent4';
            }
            function Child4() {
                Parent4.call(this);
                this.type = 'child4';
            }
            Child4.prototype = Parent4.prototype;
    

    缺点:不能区分对象是子类的实例还是父类的实例

    5、组合方式3

           function Parent5() {
                this.name = 'parent5';
            }
            function Child5() {
                Parent3.call(this);
                this.type = 'child4';
            }
            Child5.prototype = Object.create(Parent5.prototype);
            Child5.prototype.constructor = Child5;
    

    相关文章

      网友评论

          本文标题:对象的创建与继承

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