原型继承及添加属性


        function Animal(age) {
            this.age = age;
            this.sleep = function () {
                console.log('我会睡觉');
            }
        }

        //将固有的方法直接定义在原型对象上,所有对象的实例都可以共享该方法
        Animal.prototype.eat = function () {
            console.log(this.name + '会吃饭');
        }

        function Fish(age, name) {
            Animal.call(this, age)
            this.name = name;
        }

        //Fish的原型对象指向Animal的实例    有如下几种方法
        // Fish.prototype=Animal.prototype;     //子动父动
        // Fish.prototype = new Animal(6);  //当父构造函数有参数时,该方法不严谨
        // Fish.prototype.__proto__ = Animal.prototype;
        // Object.setPrototypeOf(Fish.prototype,Animal.prototype);
        Fish.prototype = Object.create(Animal.prototype);     //Object.create可以创建一个对象并返回,这个对象的原型指向第一个参数

        //Fish的原型拥有Animal的实例的全部属性和方法
        // Fish的原型的__proto__属性指向Animal的原型,Fish的实例拥有Animal实例以及Animal的原型的全部属性和方法
        console.log(Fish.prototype.__proto__ == Animal.prototype);  //true

        // 此时Fish的原型的constructor 指向为 Animal
        console.log(Fish.prototype.constructor);

        // 修复Fish的原型的constructor 指向为 Fish   目的是防止原型链的混乱
        Fish.prototype.constructor = Fish;
        console.log(Fish.prototype.constructor);

        //必须在修复Fish的原型的constructor 指向后添加属性
        Fish.prototype.sex = 'male';
        Fish.prototype.do = function () {
            console.log(this.name + '会游泳');
        }

        var fish = new Fish(5, '鲤鱼');
        console.log(fish);
        fish.eat();
        fish.do();
        console.log(fish.sex);

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值