类/继承
原型/构造函数
类/继承
类:简单理解成构造函数,需要通过类构建对象
7.创建实例对象时只调用constructor对象,如果需要调用普通函数还需点方法;
1.类中constructor内的属性和方法必须加this=创建的实例对象
2.属性只能写到constructor内,不能写在constructor外
3.创建实例对象时实参传递进constructor对象内
4.普通方法定义时不用加this
5.普通函数在类中被调用时需要加this
6.创建实例对象调用方法时实参传递进普通函数
8.es6中没有变量/函数的提升,所以类一定要写在实例之前
9.类中所有函数之间不能加逗号隔开
定义代码:
class Lzy{
constructor(行参){
this.属性名=值;
this.方法名=方法;
}
//(constructor外不能直接加属性名,只能加方法函数)
lzy(){ }
}
调用代码
var 接受对象名=new Lzy()
继承
1.就近原则:子实例对象调用方法,如果子类有直接被调用,如果子类没有该方法,去父类找
2.子类中,constructor内super必须在this之前调用
3.父类函数在被子实例对象调用时,this还想指回父类时:用变量将this 赋值/调用代码
继承代码
class 父类名{ }
class 子类名extends父类名{ }
1.子类中可以调用父类普通方法,并且通过super.父类普通函数名(参数),向此方法传递参数
2.子类中可以调用父类constructor函数,并且通过super.(参数),向constructor方法传递参数
3.子实例对象可以直接调用父类方法,子类可以继承父类普通方法
4.子实例对象不能直接调用父类中的constructor对象;
原型/构造函数
1.定义:构造函数属性/方法:静态成员,实例成员
静态成员:不需要加this
(1)在构造函数本身添加的属性/方法
(2)静态成员可以通过命名的构造函数名直接访问/设置
(3)静态成员不能通过new之后的对象进行访问/设置
实例成员:需要加this
(1)在构造函数内通过this添加的属性/方法
(2)实例成员只能通过new之后的对象进行访问/设置
(3)实例成员不能通过命名的构造函数直接访问/设置
2.原型对象的作用:prototype对象解决因new开辟空间浪费内存问题
function 函数名(){
prototype{ //每个函数中都默认存在prototype对象
属性:constructor属性//只做指向用途(正)
属性:__proto__属性//每个对象中都有__proto__,且不能赋值
//实例对象.__proto__ === 构造函数名.prototype
方法 //prototype内存储的方法其实是存在Objecet构造函数内;
}
}
var 实例对象 = new 函数名()//创建实例对象
实例对象{ 属性:__proto__ }
3.最难的逻辑:常复习
1.构造函数➡️构造函数内prototype对象:构造函数名.prototype
2.构造函数内prototype对象➡️构造函数:prototype.constructor
3.实例对象➡️构造函数内prototype对象:实例对象.–proto–
4.prototype对象➡️Object原型对象prototype:prototype.–proto–
5.按照4同123
6.Object原型对象prototype的原型对象prototype为null
4.给原型对象prototype添加应用时需要用点方法,如果直接写会将原有覆盖
(1)prototype内存的方法其实是存在Objecet构造函数内;
5.继承
(1)继承属性:利用调用构造函数且改变构造函数this指向的函数方法:函数名.call(参数 )
function 子构造函数 (){
父构造函数名.call(this,参数1,参数2)
}
(2)继承方法:将父实例对象赋值给子构造函数中的prototype对象
子构造函数名.prototype= new 父实例对象();
//子实例对象的方法会找子构造函数名方法,父构造函数方法,父prototype的Object内方法