面向对象(八)继承___ 02原型式继承

2017-02-25  本文已影响32人  凸小布

title: 面向对象(八)继承___ 02原型式继承 # 文章页面上的显示名
date: # 文章生成时间,一般不改
categories: # 文章分类目录,可省略
- 面向对象
tags: # 文章标签,可省略
- 面向对象
- 基于原型面向对象的继承 # 个数不限,单个可直接跟在 tags 后面



A · 利用对象的动态特性添加属性

<script>
    function A(){}
    A.prototype.name = "默认的名称";

    var a1 = new A();
    var a2 = new A();

    console.log(a1.name);
    console.log(a2.name);
</script>

B · 替换(字面量的方式)原型对象

<script>
    function A(){}
    A.prototype = {
        name : "默认名称",
        constructor : A
    }

    var a1 = new A();
    var a2 = new A();

    console.log(a1.name);
    console.log(a2.name);
</script>

C · B.prototype = A.prototype;

<script>
    function A(){
        this.name = "默认的名称",
        this.age = 30
    }
    function B(){}

    A.prototype.des = "描述信息-A";
    // 设置B的原型对象
    B.prototype = A.prototype;
    // 修正构造器属性
    B.prototype.constructor = B;

    var b1 = new B();
    var b2 = new B();

    console.log(b1.des);
    console.log(b2.des);

    console.log(b1.constructor); //function B(){}
    console.log(b2.constructor); //function B(){}

    console.log(b1.name); //undefined

    var a1 = new A();
    console.log(a1.constructor); //function B(){}
    console.log(a1.name);

</script>
B.prototype = A.prototype 内存结构图

** B.prototype = A.prototype; 存在的问题:**
001 构造器属性指向(默认指向的是父构造函数)
002 无法获得实例属性和方法,只能继承(获得)父构造函数原型对象的属性和方法

上一篇下一篇

猜你喜欢

热点阅读