三种基本的继承类型

  1. 伪类
    通过构造函数产生对象
'use strict';

let Animal = function(name,age){
    this.name = name;
    this.age = age;
    //以下定义方式不可访问
    /*
    let sysName = function(){
        console.log(this.name)
    }
    */
    this.sysName = function(){
        console.log(this.name)
    }
}

let cat = new Animal('cat',10);
Animal.prototype.sysAge = function(){
    console.log(this.age);
}
//cat.__proto__ === Animal.prototype
cat.__proto__.sysAll = function(){
    console.log('name :'+ this.name+' age :'+ this.age);
}
cat.sysName();
cat.sysAge();
cat.sysAll();

let dog = new Animal('dog',5);
//加入到Animal.prototype的方法 dog都有
dog.sysName();
dog.sysAge();
dog.sysAll();
执行结果:
cat
10
name :cat age :10
dog
5
name :dog age :5
原理:
Function.method('new', function(){
    //创建一个新对象
    var that = object.create(this.prototype);
    //调用构造器函数
    var other = this.apply(that,arguments);
    //如果other不是一个对象,返回that
    return (typeof other === 'object' && other)||that;
    //&&运算符如果左边为真,取右边值,否则,相反
    //||运算符如果左边为正,取左边值,否则,相反
})

原型

let Animal = {
   name :'animal',
   age : 0,
   sysName:function(){
        console.log(this.name)
    }
}
let cat = Object.create(Animal);
cat.name = 'cat';
cat.sysName();
执行结果:
cat

函数化
为建立对象增加私有变量和方法,利用变量。

'use strict';

let Animal = function(){
    let name = 'animal';
    let age = '5';
    let that = {
        getName : function(){
            return name;
        },
        setName : function(str){
            name = str;
            return this;
        }
    }
    return that;
}
var cat = Animal().setName('cat');
//只能通过getName()来访问name
console.log(cat.getName());

三种方法本质上都是基于原型的继承

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值