原型继承(Es6之前)
原型对象(类)
对象:具体实例
var student = {
name : "shenming",
age : 3,
sex : '男',
run:function(){
console.log(this.name +"快跑");
}
};
var xiaomimg = {
name : "taoxian"
};
//原型继承 把xiaomimg的原型指向了student(原型对象),继承后xiaoming也可以调研student方法
xiaomimg.__proto__=student;
xiaomimg.run()
taoxian快跑
student.run()
shenming快跑
class继承(Es6新特性)
定义一个类(包含属性,方法)
//定义一个学生类
class student{
constructor(name){
//构造函数
this.name = "shenming"
}
hello(){
alert("桃仙")
}
}
//定义学生类的变量(可以多个)
var xiaoming = new student("xiaoming");
var taoxian = new student("taoxian");
//类的使用
xiaoming.hello()
xiaoming.name
taoxian.hello()
taoxian.name
class继承
//定义一个学生类
class Student{
constructor(name){
this.name = "shenming"
}
hello(){
alert('hello')
}
}
//class继承
class XiaoStudent extends Student{
constructor(name,grade){
super(name);
this.grade = grade;
}
myGrade(){
alert('小学生')
}
}
//定义学生类的变量,继承后,通过变量调用XiaoStudent 里的方法
var xiaoming = new Student("xiaoming");
var taoxian = new Student("taoxian");
class继承的本质还是指向原型(类),只不过写法更容易接受
原型链
prototype属性
在JavaScript中,每个函数都有一个prototype属性,这个属性指向函数的原型对象。
__ proto __属性
这是每个对象(除null外)都会有的属性,叫做proto,这个属性会指向该对象的原型。
每个对象都可以有一个原型_proto_,这个原型还可以有它自己的原型,以此类推,形成一个原型链。查找特定属性的时候,我们先去这个对象里去找,如果没有的话就去它的原型对象里面去,如果还是没有的话再去向原型对象的原型对象里去寻找… 这个操作被委托在整个原型链上,这个就是我们说的原型链了。
链接:https://www.jianshu.com/p/08c07a953fa0