Blogger Information
Blog 19
fans 0
comment 0
visits 8262
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
js 访问器属性、构造函数、解构赋值
Wu.Ang
Original
546 people have browsed it

js 访问器属性、构造函数、解构赋值

访问器属性

1.对象字面量声明

一次性添加

  1. let item = {
  2. // 添加data,结构更清晰
  3. data: {
  4. name: "手机",
  5. num: 2,
  6. price: 5000,
  7. },
  8. };
  9. console.log(item.data);

逐个追加

  1. let item = {};
  2. item.data = {};
  3. item.data.name = "电脑";
  4. item.data.price = 6000;
  5. console.log(item.data);
  6. // 读操作
  7. item.getPrice = function () {
  8. return this.data.price;
  9. };
  10. // 写操作
  11. item.setPrice = function (value) {
  12. this.data.price = value;
  13. };
  14. console.log(item.getPrice());
  15. item.setPrice(2000);
  16. console.log(item.getPrice());

2.访问接口 : 可以做数据验证

  1. let item = {
  2. data: {
  3. name: "手机",
  4. price: 5000,
  5. },
  6. // ===============访问接口===================================
  7. // 读操作
  8. getPrice() {
  9. return this.data.price;
  10. },
  11. // 写操作
  12. setPrice(value) {
  13. this.data.price = value;
  14. },
  15. // =================================================
  16. };
  17. console.log(item.data);
  18. console.log(item.getPrice());
  19. item.setPrice(5500);
  20. console.log(item.getPrice());

数据验证

  1. let item = {};
  2. item.data = {};
  3. item.data.name = "电脑";
  4. item.data.price = 6000;
  5. console.log(item.data);
  6. // 读操作
  7. item.getPrice = function () {
  8. return this.data.price;
  9. };
  10. // 写操作
  11. item.setPrice = function (value) {
  12. // 如果价格小于等于0,返回false
  13. if (value <= 0) return false;
  14. this.data.price = value;
  15. };
  16. console.log(item.getPrice());
  17. item.setPrice(-2000);
  18. console.log(item.getPrice());

3.接口属性化

  1. let item = {
  2. data: {
  3. name: "电脑",
  4. price: 3000,
  5. },
  6. // name读操作
  7. get name() {
  8. return this.data.name;
  9. },
  10. // price读操作
  11. get price() {
  12. return this.data.price;
  13. },
  14. };
  15. // =============================================
  16. console.log(`${item.data.name} : ${item.data.price}`);
  17. console.log(`${item.name} : ${item.price}`);

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

1.自有成员

  1. // 构造函数,必须要用new来调用
  2. let User = function (name, price) {
  3. // 直接在函数中用this引用这个空对象
  4. // 为这个新对象添加属性或方法
  5. this.name = name;
  6. this.price = price;
  7. // this指向,没有指向新对象,而是指向全局
  8. };
  9. // new,会自动把当前的this指向新对象
  10. let user = new User("手机", 6000);
  11. console.log(user);

2.共享成员

  1. let User = function (name, price) {
  2. // 自有属性 : 用来区分不同对象
  3. this.name = name;
  4. this.price = price;
  5. // 共享方法 : 调用的方法完全相同
  6. this.getInfo = function () {
  7. return `商品:${this.name},价格:${this.price}`;
  8. };
  9. };
  10. let user = new User("手机", 6000);
  11. console.log(user);
  12. // 两个对象的属性不同,但方法完全相同,造成了代码冗余
  13. // 多余的方法, 实际上应该是被左右实例所共享, 只需要保留一个方法父本
  14. // 查看对象的构造器(构造函数)
  15. console.log(user.constructor === User); // 结果返回true
  16. console.dir(User); //可以看到函数更多的细节
  17. // 所有函数都有一个原型属性prototype
  18. // 这个原型属性,对于普通函数来说, 没啥用
  19. // 但是对于构造函数来说,极其有用
  20. // 构造函数原型属性的成员, 可以被该构造函数的所有实例所共享
  21. // -------------------------------------------------------------------
  22. let User1 = function (name, price) {
  23. this.name = name;
  24. this.price = price;
  25. };
  26. // 将对象的共享成员挂载到原型属性
  27. User1.prototype.getInfo = function () {
  28. return `商品:${this.name},价格:${this.price}`;
  29. };
  30. let user1 = new User1("手机", 6000);
  31. let user2 = new User1("电脑", 8000);
  32. console.log(user1, user2);

3.私有成员

  1. let User = function (name, price) {
  2. this.name = name;
  3. this.price = price;
  4. // 私有成员
  5. let remarks = "数码产品";
  6. };

4.静态成员 :当前的属性或方法,只能通过构造函数访问,不能用实例访问

  1. let User = function (name, price) {
  2. this.name = name;
  3. this.price = price;
  4. };
  5. // 静态成员
  6. // 函数也是对象, 是对象就可以添加属性
  7. User.nation = "中国";
  8. // 只能用当前构造器访问
  9. console.log(User.nation);

5.继承 : 基于’原型’实现继承

  1. // 父级构造函数
  2. let Parent = function () {};
  3. Parent.prototype.sum = function () {
  4. return this.a + this.b;
  5. };
  6. // 子类构造器
  7. let Sun = function (a, b) {
  8. this.a = a;
  9. this.b = b;
  10. };
  11. Sun.prototype = Parent.prototype;
  12. let sun = new Sun(10, 20);
  13. console.log(sun.sum());

用类(就是函数)简化构造函数 ES6 中可以用

声明 : class Demo {}

构造方法和共享成员不能加分号

  1. // class 声明类
  2. class Demo {
  3. // 公共成员
  4. username = "数码";
  5. // 构造方法,实例初始化
  6. constructor(name, price) {
  7. this.name = name;
  8. this.price = price;
  9. }
  10. // 公享成员
  11. getInfo() {
  12. return `${this.name} : ${this.price}`;
  13. }
  14. // 静态成员
  15. static status = "123";
  16. }
  17. let demo = new Demo("电视", 20000);
  18. console.log(demo.getInfo());
  19. // 访问静态成员
  20. console.log(Demo.status);

继承

  1. // 父类
  2. class Demo {
  3. // 构造方法,实例初始化
  4. constructor(name, price) {
  5. this.name = name;
  6. this.price = price;
  7. }
  8. // 公享成员
  9. getInfo() {
  10. return `名称:${this.name},价格:${this.price}元`;
  11. }
  12. }
  13. // 子类
  14. // extends 继承
  15. class Demo2 extends Demo {
  16. constructor(name, price, num) {
  17. // super()会自动的调用父级的构造器来初始化该实例
  18. super(name, price);
  19. this.num = num;
  20. }
  21. // 子类中对父级的方法进行扩展
  22. getInfo() {
  23. return `${super.getInfo()},数量是${this.num}台`;
  24. }
  25. }
  26. let demo2 = new Demo2("电视", 30000, 20);
  27. console.log(demo2.getInfo());

解构赋值

1.数组解构

  1. let user = ["张三", 25];
  2. // 数组解构 模板=值
  3. let [username, age] = ["张三", 25];
  4. console.log(username, age);
  5. // 更新
  6. [username, age] = ["李四", 25];
  7. console.log(username, age);
  8. // 参数不足:默认值
  9. [username, age, sex = "男"] = ["李四", 25];
  10. console.log(username, age, sex);
  11. // 参数过多
  12. let [a, b, c, ...arr] = [1, 2, 3, 4, 5];
  13. console.log(a, b, c);
  14. console.log(...arr);

用途 : 两数交换

  1. let x = 10;
  2. let y = 20;
  3. [y, x] = [x, y];
  4. console.log(x, y);

2.对象解构

  1. let { name, age } = { name: "Wang", age: 25 };
  2. console.log(name, age);

更新

  1. let { name, age } = { name: "Wang", age: 25 };
  2. console.log(name, age);
  3. // 更新 必须要用 '()' 包住内容
  4. ({ name, age } = { name: "Wang", age: 23 });
  5. console.log(name, age);

模板冲突

  1. let { id, name, age } = { id: 1, name: "Wang", age: 25 };
  2. console.log(id, name, age);
  3. // 如果左边模板中变量存在明明冲突 : 起别名
  4. let { id: sex_id, sex } = { id: 1, sex: "男" };
  5. console.log(sex_id, sex);

用途 : 使用对象的解构来优化函数的声明

  1. let user = { id: 1, name: "Wang", age: 25, sex: "男" };
  2. function getUser({ id, name, age, sex }) {
  3. console.log(id, name, age, sex);
  4. }
  5. getUser(user);
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