类 Class

79 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情

大家好!我是前端爬楼工程师🚹,一个野生程序员。好奇新技术,仰慕牛大佬。如果喜欢我的文章,可以关注➕点赞,为我注入能量,与我一同成长吧~

实例的概念来自房屋建造。

类: 是用代码来描述组织结构的形式(在软件的世界里对真实世界中的问题建模);

类的几个概念:

交通工具 (代表了汽车,火车、飞机) 是一个通用

汽车也具有交通工具的特点,但本身也有自己的特点,所以可以通过继承交通工具来扩展自己的属性

每辆汽车又有自己的不同的数据,那这个就是实例化了(注意实例和类的区别就是实例是可操作的

多态说的是父类的通用行为被子类重写了,这里强调的父类和子类使用相同方法名定义的行为;

es5和es6中的类

image.png

混入

用来模拟类的复制行为,这里混入主要供对象使用;

  • 显式混入:
 function mixin(sourceObj , targetObj){
     for(valr key in sourceObj){
         if(!key in targetObj){
             targetObj[key] = sourceObj[key]
         }
     }
     return targetObj;
 }
 var Vehicle = {
     engines: 1,
     ignition: function (){
         console.log('开启引擎')
     },
     drive(){
         this.ignition()
         console.log("向前移动")
     }
 }
 var Car = mixin(Vehicle, {
     wheels:4,
     drive(){
         Vehicle.drive.call(this)
         console.log("用" + this.wheels + "个轮子跑")
     }
 })
  • 隐式混入: 和显式混入的区别就是通过call方法将属性给复制过来
var foo = {
    cool(){
        this.greeting = "xx"
        this.count = this.count ? this.count + 1:1
    }
}
foo.cool()
foo.greeting //xx
foo.count //1
var bar = {
    cool(){
        // 这种就是隐式混入
        foo.cool.call(this)
    }
}
bar.cool()
bar.greeting //xx
bar.count //1

此外,显示混入实际上无法完全模拟类的复制行为,因为对象只能复制引用,无法复制被引用的对象或者函数本身。

关于类的内容就到这里了。大家一起互相学习把!