Blogger Information
Blog 46
fans 2
comment 0
visits 19149
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
1. 用class创建一个类, 并实现自有,共享,静态成员的声明与输出 2. 实例演示数组与对象解构
P粉314265155
Original
368 people have browsed it

1、对象字面量 2、访问接口3、接口属性化

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>访问器属性</title>
  8. </head>
  9. <body>
  10. <script>
  11. // 1、对象字面量
  12. // 2、访问接口
  13. // 3、接口属性化 -
  14. // 对象声明的两种方式
  15. // 1、一次性添加
  16. let item = {
  17. date : {
  18. name :'电脑',
  19. price :5000,
  20. }
  21. }
  22. console.log(item);
  23. console.log(item.date);
  24. console.log(item.date.name);
  25. console.log(item.date.price);
  26. console.log('============');
  27. // 为属性 data price 设置访问接口
  28. // 接口就是 方法 函数
  29. // 数据 只有两种访问方式:读取、写入
  30. let item1 = {
  31. date1 : {
  32. name1 :'电脑',
  33. price1 :5000,
  34. },
  35. // 读取操作
  36. getPrice () {
  37. return item1.date1.price1;
  38. },
  39. // 写操作,一定要传参
  40. setPrice(value){
  41. this.date1.price1 = value;
  42. },
  43. }
  44. // 注意方法后面要跟括弧、
  45. // 给大家拓展个小技巧,括号我是这么记得:
  46. // 首先是中括号[]:这玩意儿绝大多数情况下都是用来包裹数组的。
  47. // 然后是大括号{}:这玩意儿绝大多数是用来包裹代码段(块)和对象
  48. // 的,比如自己写的函数的代码逻辑部分就得在大括号里。
  49. // 最后是小括号():这玩意儿绝大多数是用来跟函数打交道的。比如说调用
  50. // 函数后面得跟它,自己写的函数,函数的参数得传在小
  51. // 括号里。还有一部分情况是需要让编程语言将一段代码
  52. // 看做一个整体,需要用小括号包裹起来。
  53. console.log(item1.getPrice());
  54. console.log('------------');
  55. item1.date1.price1 = 30;
  56. console.log(item1.getPrice());
  57. console.log('------------');
  58. console.log(item1.date1.price1);
  59. console.log('------------');
  60. // 用 price1的访问接口
  61. item1.setPrice(90);
  62. console.log(item1.getPrice());
  63. console.log('============');
  64. // 2、逐个追加
  65. // 先创建一个空对象(理论上的)
  66. let item2 = { };
  67. item2.name2 = '钢琴';
  68. item2.price2 =9999;
  69. item2.date ={};
  70. item2.date.width = 100;
  71. item2.date.color = 200;
  72. console.log(item2);
  73. console.log(item2.name2);
  74. console.log(item2.date);
  75. console.log('-------------------');
  76. // 读取操作
  77. item2.getPrice = function (){
  78. return item2.date.width;
  79. };
  80. // 写操作,一定要传参
  81. item2.setPrice = function(value){
  82. this.date.width = value ;
  83. };
  84. console.log(item2.getPrice());
  85. console.log('-------------------');
  86. item2.setPrice(600);
  87. console.log(item2.getPrice());
  88. console.log('============');
  89. // 采用接口数据验证
  90. let item3 = { };
  91. item3.name3 = '钢琴';
  92. item3.price3 =9999;
  93. item3.date ={};
  94. item3.date.width = 550;
  95. item3.date.color = 200;
  96. console.log(item3);
  97. console.log(item3.name3);
  98. console.log(item3.date);
  99. console.log('-------------------');
  100. // 读取操作
  101. item3.getPrice = function (){
  102. return item3.date.width;
  103. };
  104. // 写操作,一定要传参
  105. item3.setPrice = function(value){
  106. if(value < 4000) return false;
  107. this.date.width = value ;
  108. };
  109. console.log(item3.getPrice());
  110. console.log('-------------------');
  111. item3.setPrice(5500);
  112. console.log(item3.getPrice());
  113. console.log('-------------------');
  114. // 价格小于4000失效
  115. item3.setPrice(2000);
  116. console.log(item3.getPrice());
  117. // 价格大于4000生效
  118. item3.setPrice(5300);
  119. console.log(item3.getPrice());
  120. // 简化版 模板字面量
  121. // 注意反引号、
  122. console.log(`${item3.date.width} : ${item3.date.color} `);
  123. console.log('--********--');
  124. // 再次简化 : 接口属性化
  125. let item4 = {
  126. date4 :{
  127. name4:'苹果',
  128. price4:30,
  129. },
  130. // price 属性的访问接口 属性为 访问器属性。看着
  131. get price4() {
  132. return this.date4.price4;
  133. },
  134. set price4(value) {
  135. this.date4.price4 = value;
  136. },
  137. // 经过以上操作,访问接口全部属性化了
  138. // 这是访问器属性,实际上是方法,只不过伪装成了属性。套用一个属性的马甲
  139. };
  140. // 访问器属性:属性二字,表明了该方法的使用方式
  141. console.log(item4.price4);
  142. console.log(`${item4.price4} `);
  143. </script>
  144. </body>
  145. </html>

构造函数、对象访问

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>构造函数、面向对象特征</title>
  8. </head>
  9. <body>
  10. <script>
  11. // 函数:创建一个对象
  12. let User1 =function (name ,sex) {
  13. // 步骤 三步
  14. // 1步骤一:创建空对象 保存结果
  15. let obj = {};
  16. // 2、为这个新对象,添加属性和方法
  17. obj.name = name;
  18. obj.sex = sex ;
  19. // 3、返回这个新对象
  20. return obj ;
  21. };
  22. let user1 = User1('小明','男');
  23. console.log(user1);
  24. let user2= User1('小红','女');
  25. console.log(user2);
  26. // 构造函数:专用来创建对象的函数 以下
  27. // 可以用来简化,直接this 引用 这个新对象
  28. let User2 =function (name ,sex) {
  29. this.name = name;
  30. this.sex = sex ;
  31. };
  32. let user3 = User2('小黑','男')
  33. console.log(user3);
  34. // 此时 this的 指向有问题 没有指向对象,而是指向全局了 Window this指向有问题需要修正
  35. // 以上
  36. // 构造函数:专用来创建对象的函数 以下
  37. // 可以用来简化,直接this 引用 这个新对象
  38. let User3 =function (name ,sex) {
  39. this.name = name;
  40. this.sex = sex ;
  41. };
  42. // new 可以修正 构造函数内部 this的指向。指向新的对象,而非Window
  43. // 因此构造函数必须 是用new 调用
  44. let user4 = new User2('小黑','男')
  45. console.log(user4);
  46. console.log('============');
  47. // 此时 this的 没有有问题 修正后
  48. // 以上
  49. // 构造函数: 创建对象(实例) ,通常对象和实例是同义
  50. // 构造函数 必须使用new调用
  51. let User5 = function (name , sex ){
  52. // 属性
  53. this.name =name;
  54. this.sex = sex;
  55. // 方法
  56. this.getInfo =function() {
  57. // 模板字面量,注意反引号,注意大括号
  58. return `${this.name}:${this.sex}`;
  59. };
  60. };
  61. let user5 = new User5 ('小白','女');
  62. let user6= new User5 ('小小','女');
  63. console.log(user5);
  64. console.log('----------');
  65. console.log(user5,user6);
  66. // 此时两个对象user5和 user6属性不同,是正确的,但是方法一样,出现代码冗余,需要简化
  67. // 多余的方法,实际上应该是被所有实例所共享,只需要保留一个方法即可
  68. // 不需要为每个对象保留一遍方法的代码
  69. // 其中prototype
  70. console.log('----------');
  71. // 查看对象的构造器,查本溯源
  72. console.log(user5.constructor);
  73. // 查看构造函数
  74. console.log(User5);
  75. // 对象的构造器等于 构造函数、、
  76. console.log(user5.constructor == User5);
  77. console.log('----------');
  78. // 自动打开
  79. console.dir(User5);
  80. // 所有函数都有一个prototype
  81. // 这个原型属性对普通函数,没有用、、
  82. // 但是对于构造函数,有用、
  83. // 构造函数原型属性的成员,,可以被该该构造函数所有实例共享
  84. console.log('----------');
  85. // 自己指向了自己
  86. console.dir(User5.constructor);
  87. console.log('----------');
  88. console.log(User5.constructor);
  89. console.log('-===========--');
  90. let User6 = function (name , sex ){
  91. // 属性
  92. // 自有属性
  93. this.name =name;
  94. this.sex = sex;
  95. // 方法 放在这儿会被每个对象生成一个副本,因此放到公共位置
  96. // this.getInfo =function() {
  97. // // 模板字面量,注意反引号,注意大括号
  98. // return `${this.name}:${this.sex}`;
  99. // };
  100. };
  101. // 将对象的共享成员,挂载到构造器的原型属性prototype上
  102. // 共享属性
  103. User6.prototype.getInfo = function (){
  104. // 模板字面量
  105. return `${this.name}:${this.sex}`;
  106. };
  107. let user7 = new User6 ('小朱','女');
  108. let user8= new User6 ('小刘','女');
  109. // 不会展示原型属性
  110. console.log(user7,user8);
  111. // 查看原型属性
  112. console.log(User6.prototype);
  113. console.log('-===========--');
  114. // 共享成员:加到原型属性
  115. // 1、自有成员 直接在方法 this.xxx
  116. // 2、共享成员,构造器的原型属性 fun.prototype
  117. // 3、私有成员 let
  118. // 4、静态成员 static 当前构造函数使用static
  119. // 5、继承
  120. let User7 = function (name , sex ){
  121. // 私有成员
  122. let email = '1123@qq.com';
  123. // 属性
  124. // 自有属性
  125. this.name =name;
  126. this.sex = sex;
  127. };
  128. // 静态成员: 只能用构造函数 自身防伪,不能用实例访问
  129. // 只属于 构造函数。不属于 实例对象, 只能有类访问
  130. // 函数也是对象,是对象就可以为他添加属性
  131. User7.nation = '中国';
  132. console.log(User7.nation);
  133. console.log('-----------');
  134. let y = new User7('a','b');
  135. // 访问不到 nation
  136. console.log(y.nation);
  137. console.log('-===========--');
  138. // 继承
  139. // jS没有类的概念 基于原型来实现继承
  140. // 父级为构造函数
  141. let Parent = function() {};
  142. // 方法公共的
  143. Parent.prototype.sum = function(){
  144. return this.a +this.b;
  145. };
  146. // 子类构造器,构造函数、、
  147. let Child = function (a,b) {
  148. this.a =a;
  149. this.b =b ;
  150. }
  151. // 子类继承父类的原型方法
  152. Child.prototype = Parent.prototype;
  153. let child = new Child (1,20);
  154. console.log(child.sum());
  155. </script>
  156. </body>
  157. </html>

class类简化构造器

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>class类简化构造函数创建对象的过程</title>
  8. </head>
  9. <body>
  10. <script>
  11. // 类?
  12. // 其实js没有类 ,js中的类就是函数
  13. // 声明类 ,空类
  14. class Class1 {};
  15. console.dir(Class1);
  16. console.log('----------');
  17. console.dir(function(){});
  18. console.log('----------');
  19. console.log(typeof Class1);
  20. console.log('----------');
  21. // es6 class
  22. // class 声明类
  23. class Demo1 {
  24. // 构造方法,实例初始化
  25. // 注意构造方法后面 不要有分号
  26. constructor(name ,sex) {
  27. // 自有属性
  28. this.name= name;
  29. this.sex = sex;
  30. // 注意构造方法后面 不要有分号
  31. }
  32. // 共享、原型成员 声明在原型里面
  33. // 注意构造方法后面 不要有分号
  34. getInfo() {
  35. // 模板字面量
  36. return `${this.name}:${this.sex} `;
  37. }
  38. // 静态成员
  39. static status = 'enable';
  40. };
  41. const obj = new Demo1 (`小黑`,'男');
  42. console.log(obj.getInfo());
  43. console.log('----------');
  44. // 访问不到 静态成员要以构造函数访问
  45. console.log(obj.status);
  46. console.log('----------');
  47. // 访问到了
  48. console.log(Demo1.status);
  49. console.log('----------');
  50. // 继承 extends Demo2 也是类
  51. class Demo2 extends Demo1 {
  52. // 子类 构造器 写的方法一
  53. // 注意构造方法后面 不要有分号
  54. // constructor(name ,sex) {
  55. // 自有属性
  56. // this.name= name;
  57. // this.sex = sex;
  58. // 注意构造方法后面 不要有分号
  59. // }
  60. // 子类 构造器 写的方法二
  61. // super()会自动 调用父类的构造器初始化该实例
  62. constructor(name ,sex,email) {
  63. super(name,sex);
  64. // 子类自有属性 子类属性初始化
  65. this.email =email;
  66. }
  67. // 子类对父类方法初始化和扩展
  68. getInfo() {
  69. // 模板字面量 写法一
  70. // 反引号中不能有中文
  71. return `${this.name}:${this.sex},${this.email} `;
  72. // 简写
  73. return `${super.getInfo()}+${this.email} `;
  74. }
  75. }
  76. const obj2 = new Demo2('小曹','男','244@qq.com');
  77. console.log(obj2.getInfo());
  78. console.log('----------');
  79. // 在类中可以使用访问器属性
  80. class Demo3 {
  81. age = 30;
  82. get age(){
  83. return this.age;
  84. }
  85. set age(value){
  86. this.age =value;
  87. }
  88. }
  89. // 访问器属性实现
  90. const obj4 = new Demo3 ();
  91. console.log(obj4.age);
  92. console.log('----------');
  93. obj4.age = 80;
  94. console.log(obj4.age);
  95. </script>
  96. </body>
  97. </html>

解构赋值

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>解构赋值</title>
  8. </head>
  9. <body>
  10. <script>
  11. const user = ['小红','女'];
  12. let username = user[0];
  13. let username1 = user[1]
  14. console.log(username ,username1);
  15. console.log('------------');
  16. // 1、数字解构
  17. // 更新
  18. [username ,username1] = ['小芳','女'];
  19. console.log(username ,username1);
  20. // 初始化
  21. let [username2 ,username3] = ['小购','女'];
  22. console.log(username2 ,username3);
  23. console.log('------------');
  24. // 参数不足:默认值上
  25. // 模板中有三个变量,但是值只有两个 不足,只展示两个
  26. [username ,username1,age] = ['小解','女'];
  27. console.log(username ,username1);
  28. // 参数过多
  29. [a,b,c,...arr] = [1,2,3,4,5,6,7];
  30. console.log(a,b,c);
  31. console.log(...arr);
  32. // 二次交换
  33. let x =10;
  34. let y =20;
  35. console.log([x,y]);
  36. console.log('------------');
  37. // let z = x;
  38. // let x = y ;
  39. // let y = z;
  40. [y,x] = [x,y];
  41. console.log([x,y]);
  42. console.log('------------');
  43. // 对象解构
  44. // 目标是吧对象中的属性值保存到对应的,与属性同名的变量中
  45. let {id , lesson ,price} = {id :1, lesson :'语文',price:90};
  46. console.log(id, lesson,price );
  47. // 更新 必须转为表达式 小括号 把整个表达式封装起来
  48. ({id , lesson ,price} = {id :2, lesson :'数学',price:60});
  49. console.log(id, lesson,price );
  50. console.log('------------');
  51. // 如果左边模板中的变量存在命名冲突,需要起一个别名
  52. let {id:item , num ,score} = {id :3, num :'英语',score:50};
  53. console.log(item,num,score);
  54. console.log('------------');
  55. // 应用场景
  56. function getUser(user123){
  57. // user123 是一个对象
  58. console.log(user123.id11, user123.name11, user123.email11);
  59. }
  60. // 方法一
  61. let user123 = { id11:55, name11:'小好',email11:'1234@qq.com'}
  62. // 方法一 调用
  63. getUser(user123);
  64. console.log('------------');
  65. let user456 = {id1234:11, name1234:11,email1234:11};
  66. function getUser2({id1234, name1234,email1234}){
  67. // user456 是一个对象
  68. console.log(id1234, name1234,email1234);
  69. }
  70. // 方法一 调用
  71. getUser2(user456);
  72. </script>
  73. </body>
  74. </html>

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
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!