博客列表 >Javascript的访问器属性、构造函数、"类"、解构赋值

Javascript的访问器属性、构造函数、"类"、解构赋值

P粉932932019
P粉932932019原创
2022年07月25日 18:41:10695浏览

一、访问器属性

1、对象字面量声明的2种方法

  • 一次性添加全部成员:属性、方法
  1. let obj = {
  2. //用一个data属性包裹,便于分类管理
  3. data: {
  4. name: "Tom",
  5. email: "123@qq.com",
  6. },
  7. //方法:读
  8. getinfo() {
  9. return this.data.name + ":" + this.data.email;
  10. },
  11. //方法:写
  12. setinfo(value) {
  13. this.data.email = value;
  14. },
  15. };
  16. obj.data.email = "234@qq.com";
  17. console.log(obj.getinfo()); //打印:Tom:234@qq.com
  • 逐个添加成员:属性、方法
  1. let obj = {}; //首先要创建空对象
  2. obj.data = {}; //创建一个分类管理的对象
  3. obj.data.name = "zhangsan"; //属性初始化(赋值),挂在到分类管理的对象data上
  4. obj.data.age = 18;
  5. obj.data.sex = "male";
  6. //方法:读
  7. obj.getinfo = function () {
  8. return this.data.name + ":" + this.data.age + ":" + this.data.sex;
  9. };
  10. //方法:写
  11. obj.setinfo = function (value1, value2) {
  12. obj.data.age = value1;
  13. obj.data.sex = value2;
  14. };
  15. obj.data.age = 20;
  16. obj.data.sex = "female";
  17. console.log(obj.getinfo()); //打印:zhangsan:20:female
  18. console.log(obj.data.name); //分别打印属性,造成了代码冗余,用下述的访问接口操作
  19. console.log(obj.data.age);
  20. console.log(obj.data.sex);

2、属性访问接口

  1. let obj = {
  2. data: {
  3. name: "zhangsan",
  4. age: 20,
  5. },
  6. // 属性访问接口
  7. // 这是"访问器属性",实际上就是方法,只不过伪装成了属性,套了一个属性的马甲
  8. get name() {
  9. return this.data.name;
  10. },
  11. set name(value) {
  12. this.data.name = value;
  13. },
  14. };
  15. obj.name = "lisi";
  16. console.log(obj.name); //打印:lisi

二、构造函数

专门用于创建对象(实例)的函数就是构造函数

1、原生(常规)的书写方式

  1. // 构造函数:在函数里创建一个对象,3个步骤
  2. let User1 = function (name, age) {
  3. // 步骤1:创建一个空对象
  4. let obj = {};
  5. // 步骤2:创建对象属性
  6. obj.name = name;
  7. obj.age = age;
  8. //步骤3:返回对象
  9. return obj;
  10. };
  11. let user2 = User1("Tom", 29);
  12. console.log(user2); //{name: 'Tom', age: 29}
  13. let user3 = User1("Jerry", 31);
  14. console.log(user3); //{name: 'Jerry', age: 31}

2、简化的书写方式

  1. // 默认创建了空对象,所以不用再创建了,只需要在函数中使用this引用对象即可
  2. let User2 = function (name, age) {
  3. //console.log(this) 去掉第9行的new,然后打印该行,查看this的指向为window,并未指向默认创建的新对象,所以应该用 new 来调用修正
  4. this.name = name;
  5. this.age = age;
  6. };
  7. //默认返回当前对象,所以不需要返回对象return
  8. let user3 = new User2("Tom", 21);
  9. console.log(user3); //{name: 'Tom', age: 21}

注意:

  • this默认指向window,查看上述代码第3行
  • let user3 = new User2("Tom", 21); 使用了new来调用指向创建的新对象,如果不使用new则返回undefined
  • 即:构造函数必须使用 new 来调用,修正this指向新对象而非window

3、“类”的创建

JS中没有“类”,所谓“类”其实就是函数

  1. class User1 {
  2. // 公共成员
  3. name = "Tom";
  4. // 构造方法/创建实例
  5. constructor(name, age) {
  6. // 自有属性
  7. this.name = name;
  8. this.age = age;
  9. }
  10. // 共享成员
  11. getinfo() {
  12. return `${this.name}:${this.age}`;
  13. }
  14. // 静态成员
  15. static status = "enable";
  16. }
  17. const user = new User1("Jerry", 24);
  18. console.log(user.getInfo());
  1. class User2 extends User1 {
  2. constructor(name, age,sex) {
  3. super(name,age)
  4. this.sex = sex;
  5. }
  6. getinfo() {
  7. return `${super.getinfo()},${this.age}`;
  8. }
  9. }
  10. const user2 = new User2("Jerry", 24,'male');
  11. console.log(user2.getInfo());

注意:

  • 继承: extends,来集成父级属性
  • super()会自动的调用父类的构造器来初始化该实例

三、解构赋值

1、数组的解构赋值

  1. //赋值
  2. let [name, email] = ['Tom', '123@qq.com'];
  3. //更新
  4. [name, email] = ['Jerry', '456@qq.com'];
  5. //参数不足
  6. let [name, email, age=18] = ['Jerry', '456@qq.com'];
  7. //参数过多
  8. let [num_a, num_b,...rest] = [1,2,3,4,5,6,7,8,9];

2、对象的解构赋值

  • 对象解构1:
  1. // 赋值
  2. let obj = ({ id, name, age } = { id: 1, name: "Tom", age: 21 });
  3. // 更新
  4. obj = { id, name, age } = { id: 2, name: "Jerry", age: 31 };
  5. console.log(obj);
  • 对象解构2:
  1. // 赋值
  2. let { id, price, num } = { id: 100, price: 200, num: 300 };
  3. // 更新
  4. ({ id, price, num } = { id: 102, price: 203, num: 304 });
  5. console.log({ id, price, num });

注意:

  • 在更新的时候需要在两侧加上中括号()
    ({ id, price, num } = { id: 102, price: 203, num: 304 });

  • 如果左边模板中的变量存在命名冲突怎么办? 起一个别名

    1. let { id: itemId, num, price } = { id: 123, num: 10, price: 1234 };
    2. console.log(itemId, num, price);
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议