类的继承。类有三种属性:公有属性(prototype)私有属性 静态方法(静态属性)
在es5中没有类的概念的,通过构造函数来实现类
es5如何实现一个类
- 继承私有属性
function Child(){
this.age=9;
Parent.call(this);
}
let child=new Child();
2.继承公有属性
先找私有属性,找不到了找公有属性
function Parent(){
//构造函数中的this 通过new调用的那么this指代的是实例
this.name='parent'
}
Parent.prototype.eat=function(){
console.log('eat')
}
1).Child.prototype._proto_=Parent.prototype;
2).Object.setPrototypeOf(Child.prototype,Parent.prototype)
3).Child.prototype._proto_=Object.create(Parent.prototype,{constructor:{value:Child}});
function create(parentPrototype,props){
function Fn(){
Fn.prototype=parentPrototype;
for(let key in props){
let fn=new Fn()
Object.defineProperty(fn,key,{...props[key],enumber:true})}
return fn;
}
}
Object.defineProperty(a,'name',{
enumerable:true,//表示这个属性是否可以被枚举出来
configurable:true,//表示这个属性是否可以被删除
get(){
return 1
},
set(val){
}
})
3、继承私有属性和公有属性
Child.prototype =new Parent()
es6如何实现一个类
class Parent{
constructor(){
this.name=p//私有属性
}
static b(){//属于类上的方法
return 2;}
eat(){//原型上的方法
console.log('eat')
}
}
class Child{
constructor(){
this.age=9//私有属性
}
static a(){//属于类上的方法
return 1;}
smoking(){//原型上的方法
console.log('smoking')
}
}
let child =new Child()//继承私有和公有属性
//继承私有方法
class Child extends Parent{
constructor(){
super()
}
static c(){}
}
-
类只能new
- 类可以继承私有、共有、静态方法
- 父类的构造函数中返回了一个引用类型会把这个引用