js中class基本概念和基本用法

一:注意点:

1、继承父级的公有方法,静态方法不能继承

2、super在继承时调用;调用父类的constroctor;

3、在定义之前调用会产生暂时性死区;

console.log(new Person())  // 产生暂时性死区
class Person{}

4、定义私有属性的方法

class Person {
  constructor () {
    this.a = 1;  // 私有属性
  }
  b = 2;  // 不常用
  
  say () {}  // 公有属性
}
console.log(new Person()); // Person {b: 2, a: 1}

5、定义公有的方法

class Person {
  constructor () {
    this.a = 1;  // 私有属性
  }
  b = 2;  // 不常用
  
  sleep () {}  // 公有  类似 Person.prototype.sleep = function () {}
  say () {}  // 公有属性
}
console.log(new Person()); // Person {b: 2, a: 1}

6、公有方法私有化

a: Symbol类型定义属性;

b: 将函数定义到外部,内部访问不到

let eat = Symbol('foo')
class Person {
  constructor () {
    this.name = 'zs'
  }
  say () {
    console.log(`say方法`);
  }

  [eat] () {  // 公有方法私有化;
    console.log(`Symbol类型${eat}的方法`);
  }
}
new Person().say();
let p = new Person();
console.log(p);

将函数定义到外部,内部访问不到 

let eat = Symbol('foo')
class Person {
  constructor () {
    this.name = 'zs'
  }
  say () {
    eat.call(this)
  }

}
function eat () {
  this.food = '123'
}

new Person().say();
let p = new Person();
console.log(p);

 7、定义静态方法static 可有类构造器调用,实例不能继承调用

class Person {
  constructor() {
    this.name = 'zs';
  }

  static say() {
    console.log('hello');
  }

  sayName () {
    console.log('zs')
  }
}

new Person().sayName()  // zs
Person.say();   // hello

// ============================
// 传统定义方式
function foo  () {}
foo.sayName = function () {
  console.log('hello');
}
console.log(foo.sayName())

8、set和get修饰符

class Person {
  constructor() {
    this.name = 'zs';
  }

  get a () {
    console.log('1')
  }
  set b (val) {
    console.log(2);
  }
}
let p  = new Person();
console.log(p)  // Person {name: 'zs', a:....}

 

二:总结:

1、class类定义的共有属性是不可枚举的 ; Person.prototype.say = function () {}; 定义的方法是可枚举的

(1)、class与let 在声明之前调用会产生暂时性死区(TDZ)

(2)、公有方法不可枚举,以前的方法可枚举

(3)、默认严格模式

(4)、类中会有一个默认的constructor, 不写不会报错

(5)、类的调用需 new 的方法执行

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值