携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情
大家好!我是前端爬楼工程师🚹,一个野生程序员。好奇新技术,仰慕牛大佬。如果喜欢我的文章,可以关注➕点赞,为我注入能量,与我一同成长吧~
类和实例的概念来自房屋建造。
类: 是用代码来描述组织结构的形式(在软件的世界里对真实世界中的问题建模);
类的几个概念:
交通工具 (代表了汽车,火车、飞机) 是一个通用类
汽车也具有交通工具的特点,但本身也有自己的特点,所以可以通过继承交通工具来扩展自己的属性
每辆汽车又有自己的不同的数据,那这个就是实例化了(注意实例和类的区别就是实例是可操作的)
多态说的是父类的通用行为被子类重写了,这里强调的父类和子类使用相同方法名定义的行为;
es5和es6中的类
混入
用来模拟类的复制行为,这里混入主要供对象使用;
- 显式混入:
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
此外,显示混入实际上无法完全模拟类的复制行为,因为对象只能复制引用,无法复制被引用的对象或者函数本身。
关于类的内容就到这里了。大家一起互相学习把!