Blogger Information
Blog 15
fans 0
comment 0
visits 10895
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Javascript的访问器属性、构造函数、"类"、解构赋值
P粉932932019
Original
697 people have browsed it

一、访问器属性

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);
Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post