网站开发文档是什么概念,网站编辑有前途吗,网站建设合同 协议书,公司企业网络宣传设计方案【基础认知】 1、构造器中的this指向——类的实例对象 2、类中的构造器不是必须写的#xff0c;要对实例进行一些初始化的操作#xff0c;如添加指定属性时才写。 3、如果A类继承了B类#xff0c;且A类中写了构造器#xff0c;那么A类构造器中的super时必须要调用的。 4、类… 【基础认知】 1、构造器中的this指向——类的实例对象 2、类中的构造器不是必须写的要对实例进行一些初始化的操作如添加指定属性时才写。 3、如果A类继承了B类且A类中写了构造器那么A类构造器中的super时必须要调用的。 4、类中锁定的方法都是放在了类的原型对象上供实例去使用 class类的基础使用
静态属性只能构造函数访问
公有属性写在构造函数.prototype (实例属性定义在实例对象this上的属性) // 手机// 实例成员只能通过实例化对象来访问// function Phone(brand, price) {// this.brand brand// this.price price// }// 添加方法// Phone.prototype.call function () {// console.log(我可以打电话)// }// 实例化对象// let Huawei new Phone(华为, 5999);// Huawei.call();// console.log(Huawei);class Phone {// 构造方法 名字不能修改constructor(brand, prive) {this.brand brand;this.price prive;}// 方法必须使用该语法不能使用ES5的对象完整形式call() {console.log(我可以打电话)}}let onePlus new Phone(1, 1999)onePlus.call()console.log(onePlus)
class静态成员 function Phone() {}// 静态成员属于类不属于实例对象// 静态成员只能通过构造函数来访问Phone.name 手机Phone.change function () {console.log(我可以改变世界)}Phone.prototype.size 5.5inchlet nokia new Phone()console.log(nokia.size)//5.5inchconsole.log(nokia.name)// undefinednokia.change()// 报错说不是一个函数class Phone1 {// 静态属性static name 手机;static change() {console.log(我可以改变世界)}}let aaa new Phone1();console.log(Phone1.name)//手机console.log(aaa.name)// undefined
构造函数继承 // 手机function Phone(brand, price) {this.brand brandthis.price price}Phone.prototype.call function () {console.log(我可以打电话)}// 智能手机function SmartPhone(brand, price, color, size) {Phone.call(this, brand, price);this.color colorthis.size size}// 设置子集构造函数的原型SmartPhone.prototype new Phone;SmartPhone.prototype.constructor SmartPhone;// 声明子类的方法SmartPhone.prototype.photo function () {console.log(我可以拍照)}SmartPhone.prototype.playGame function () {console.log(我可以玩游戏)}const chuizi new SmartPhone(锤子, 2499, 黑色, 5.5inch);console.log(chuizi)chuizi.photo()chuizi.playGame()
类的函数继承 // 手机class Phone {constructor(brand, price) {this.brand brand;this.price price;}call() {console.log(我可以电话)}}// 智能手机class SmartPhone extends Phone {constructor(brand, price, color, size) {//super之前调用this会报错super(brand, price);this.color color;this.size size;}photo() {console.log(我可以拍照)}palyGame() {console.log(我可以玩游戏)}}let chuizi new SmartPhone(锤子, 2999, 黑色, 5.5inch)console.log(chuizi)chuizi.call()
//容易出错的地方 忘记写extends 构造函数中的形参 super()
super 这个关键字既可以当作函数使用也可以当作对象使用。在这两种情况下它的用法完全不同。
函数 子类B的构造函数之中的super()代表调用父类的构造函数。 super虽然代表了父类A的构造函数但是返回的是子类B的实例即super内部的this指的是B因此super()在这里相当于A.prototype.constructor.call(this)。 对象 在普通方法中指向父类的原型对象在静态方法中指向父类。由于super指向父类的原型对象所以定义在父类实例上的方法或属性是无法通过super调用的。 class 作为构造函数的语法糖同时有 prototype属性和__proto__属性因此同时存在两条继承链。
类的get 和set // get 和 setclass Phone {get price() {console.log(价格属性被读取了);return iloveyou}set prive(newVal) {// 必须要设置一个参数不然报错console.log(价格属性被修改了)}}// 实例化对象let s new Phone();// console.log(s.price)s.prive free// 类似于vue的watch和computed