js 继承 ES5

<script type="text/javascript">
    //原型链继承
    //优点:子类对象 能够继承 父类对象以及父类对象的原型对象的成员(整个原型链上的成员)
    //缺点:破坏了原型链(将子类自身的constructor丢了)
    //定义父类构造函数
    function A(){
        this.age = 10;
    }
    A.prototype.say = function(){
        console.log(100);
    }
    //定义子类构造函数
    function B(){

    }
    //设置子类构造函数的原型对象 = 父类构造函数的实例对象
    B.prototype = new A();  //会将B的实例对象自己的constructor属性丢了
    // B.prototype.constructor = B;

    var b = new B();
    console.log(b.age);
    b.say();

    console.log(b.constructor);

</script>
<script type="text/javascript">
    //冒充继承
    //优点:不会丢失子类对象的constructor属性
    //缺点:只能继承父类构造函数中设置的成员,不能继承父类原型对象上的成员
    //父类构造函数
    function A(){
        this.age = 30;
    }
    A.prototype.say = function(){
        console.log(320);
    }
    //子类构造函数
    function B(){
        //this 实例化后的 b
        //使用子类this 去冒充 父类构造函数中的this, 并且直接调用父类构造函数
        //父类中的成员都设置到了子类对象中
        A.call(this);  // call  apply  bind 三选一
        // var obj = this;
        // A.call(obj);
        // A.apply(this);
        // A.bind(this)()
    }

    var b = new B();
    console.log(b.age);
    console.log(b.constructor);
    b.say();//报错
</script>
<script type="text/javascript">
    //Object.create(父对象)方法继承
    //
    //创建一个新对象,并且指定其原型对象
    //特点:适用于继承一个现有的对象,但是没有直接定义的构造函数
    var person = {"age":30};
    var obj = Object.create(person);
    console.log(obj);
    console.log(obj.age);
    // var obj = new Object(); // var obj = {};
    // obj.__proto__ = person;
</script>

 

js 继承 ES5

上一篇:5.python 操作 MySQL


下一篇:.NET Generic Host in ASP.NET Core