• JS 之 前端对象详解


    目录

    一. 对象的基本概念

    01. 对象的使用

    02. 对象的创建方式

    1 - 对象字面量

    2 - 构造函数

    3 - 类创建 

    03 - 对象的操作 

    1 - 定义

    2 - 访问对象属性 

    3 - 修改对象属性

    4 - 增加对象属性 

    5 - 删除对象属性 

    二、对象的方括号 [] 使用法

    三、对象的遍历方式 

    1. 普通for循环

    2 - for ... in ...

    3 - 后续慢慢更新~

    四、对象的内存分配

    1. 面试题一

    2. 面试题二

    3. 面试题三

    4. 面试题四

    5. 面试题五

    五、创建一系列对象的方式 

    1. 一个一个写

    2. 通过for循环写

    3. 通过工厂函数 

    4. 通过new操作符来创建

    六、后续更新中~


    一. 对象的基本概念

    01. 对象的使用

    • key: 字符串类型, 但是在定义对象的属性名时, 大部分情况下引号都是可以省略的
    • value : 可以是任意值
    1. const person = {
    2. name: 'why',
    3. age: 18,
    4. height: 1.88,
    5. // 这种的就要加上''号
    6. 'my friend': {
    7. name: 'kobe',
    8. age: 30
    9. },
    10. run: function () {
    11. console.log('running');
    12. },
    13. eat: function () {
    14. console.log('eat foods');
    15. },
    16. };

    02. 对象的创建方式

    1 - 对象字面量

    1. // 直接花括号赋值即可,用的最多
    2. const obj1 = {
    3. name: "why"
    4. }

    2 - 构造函数

    1. // 当函数被new关键词调用时,该函数就被称为构造函数
    2. const obj = new Object()
    3. obj.name = "star"
    4. obj2.runing = function(){}

    3 - 类创建 

    1. class Person {
    2. constructor(name) {
    3. this.name = name;
    4. }
    5. }
    6. const stu = new Person('star');

    03 - 对象的操作 

    1 - 定义

    1. const info = {
    2. name: "star",
    3. age: 18,
    4. friend: {
    5. name: "coder",
    6. age: 30
    7. },
    8. running: function() {
    9. console.log("running~")
    10. }
    11. }

    2 - 访问对象属性 

    1. console.log(info.name)
    2. console.log(info.friend.name)
    3. info.running()

    3 - 修改对象属性

    1. info.age = 25
    2. info.running = function() {
    3. alert("I am running~")
    4. }
    5. console.log(info.age)
    6. info.running()

    4 - 增加对象属性 

    1. info.height = 1.88
    2. info.studying = function() {
    3. console.log("I am studying~")
    4. }

    5 - 删除对象属性 

    1. delete info.age
    2. delete info.height

    二、对象的方括号 [] 使用法

    1. const obj = {
    2. name: "why",
    3. "my friend": "kobe",
    4. "eating something": function() {
    5. console.log("eating~")
    6. }
    7. }
    8. // 这里 . 语法不能用
    9. console.log(obj["my friend"])
    10. console.log(obj.name)
    11. // 这和 . 语法一个意思
    12. console.log(obj["name"])
    13. // 用变量的值充当对象的key
    14. var eatKey = "eating something"
    15. obj[eatKey]()
    16. // 可连在一起使用
    17. obj["eating something"]()

    三、对象的遍历方式 

    1. 普通for循环

    1. // Object.keys() => 拿到对象的所有key
    2. const infoKeys = Object.keys(info)
    3. for (let i = 0; i < infoKeys.length; i++) {
    4. // 拿到key的值
    5. let key = infoKeys[i]
    6. // 拿到value的值
    7. let value = info[key]
    8. console.log(`key: ${key}, value: ${value}`)
    9. }

    2 - for ... in ...

    1. // 可直接拿到对象的key
    2. for (let key in info) {
    3. let value = info[key]
    4. console.log(`key: ${key}, value: ${value}`)
    5. }

    3 - 后续慢慢更新~

    四、对象的内存分配

    js代码可以运行在浏览器,也可运行在node环境,无论是什么环境,最终都是运行在内存中

    内存会映射在真实的电脑物理内存中,所以内存越大,跑的速度越快~~~

    • 基本类型 : 存储在内存中的栈内存
    • 引用类型 : 存储在内存中的堆内存

    1. 面试题一

    1. const obj1 = {}
    2. const obj2 = {}
    3. console.log(obj1 === obj2) // false

    2. 面试题二

    1. const info = {
    2. name: "why",
    3. friend: {
    4. name: "kobe"
    5. }
    6. }
    7. const friend = info.friend
    8. friend.name = "james"
    9. console.log(info.friend.name) // james

    3. 面试题三

    1. function foo(a) {
    2. a = 200
    3. }
    4. const num = 100
    5. foo(num)
    6. console.log(num) // 100

    4. 面试题四

    1. function foo(a) {
    2. a = {
    3. name: "star"
    4. }
    5. }
    6. const obj = {
    7. name: "obj"
    8. }
    9. foo(obj)
    10. console.log(obj) //{ name:obj }

    5. 面试题五

    1. function foo(a) {
    2. a.name = "star"
    3. }
    4. const obj = {
    5. name: "obj"
    6. }
    7. foo(obj)
    8. console.log(obj) // {name : star}

    五、创建一系列对象的方式 

    1. 一个一个写

    有点小蠢~

    1. const stu1 = {
    2. name: 'star',
    3. age: 16,
    4. height: 1.66,
    5. running: function () {
    6. console.log('running~');
    7. }
    8. };
    9. const stu2 = {
    10. name: 'coder',
    11. age: 17,
    12. height: 1.77,
    13. running: function () {
    14. console.log('running~');
    15. }
    16. };
    17. const stu3 = {
    18. name: 'liuli',
    19. age: 18,
    20. height: 1.88,
    21. running: function () {
    22. console.log('running~');
    23. }
    24. };

    2. 通过for循环写

    还是有点蠢~

    1. const nameArr = ['star', 'coder', 'liuli'];
    2. const ageArr = [16, 17, 18];
    3. const heightArr = [1.66, 1.77, 1.88];
    4. const funcs = {
    5. running: function () {
    6. console.log('running~');
    7. }
    8. };
    9. for (let i = 0; i < nameArr.length; i++) {
    10. let stu = {
    11. name: nameArr[i],
    12. age: ageArr[i],
    13. height: heightArr[i],
    14. running: funcs.running
    15. };
    16. console.log(stu); //{name: 'star', age: 16, height: 1.66, running: ƒ} ...
    17. }

    3. 通过工厂函数 

    1. // 工厂函数(工厂生产student对象) -> 一种设计模式
    2. // 通过工厂设计模式, 自己来定义了一个这样的函数
    3. function createStudent(name, age, height) {
    4. const stu = {};
    5. stu.name = name;
    6. stu.age = age;
    7. stu.height = height;
    8. stu.running = function () {
    9. console.log('running~');
    10. };
    11. return stu;
    12. }
    13. const stu1 = createStudent('stare', 16, 1.66);
    14. const stu2 = createStudent('coder', 17, 1.77);
    15. const stu3 = createStudent('liuli', 18, 1.88);
    16. console.log(stu1);
    17. console.log(stu2);
    18. console.log(stu3);

    弊端 :  拿到的数据的类型都是Object类型

    4. 通过new操作符来创建

    简单理解下构造函数

    1. // JavaScript已经默认提供给了我们可以更加符合JavaScript思维方式(面向对象的思维方式)的一种创建对象的规则
    2. // 在函数中的this一般指向某一个对象
    3. /*
    4. 如果一个函数被new操作符调用
    5. 1.创建出来一个新的空对象
    6. 2.这个对象的 __proto__ 指向构造函数的 prototype
    7. 3.让this指向这个空对象
    8. 4.执行函数体的代码块
    9. 5.如果没有明确的返回一个非空对象, 那么this指向的对象会自动返回
    10. */
    11. function Coder(name, age, height) {
    12. // 相当于new操作符做了
    13. // let obj = {}
    14. // this = obj
    15. this.name = name
    16. this.age = age
    17. this.height = height
    18. this.running = function() {
    19. console.log("running~")
    20. }
    21. // return this
    22. }
    23. // 在函数调用的前面加 new 关键字(操作符)
    24. const stu1 = new coder("why", 18, 1.88)
    25. const stu2 = new coder("kobe", 30, 1.98)
    26. console.log(stu1, stu2)

    六、后续更新中~

     

  • 相关阅读:
    View基础知识-位置大小和滑动
    vue3+vite项目中使用svgIcon
    分享几招教会你怎么给图片加边框
    实战Netty!基于私有协议,怎样快速开发网络通信服务?
    RHCSA3
    前端工程化以及WebPack的使用
    直播美颜SDK代码浅析:直播平台接入美颜SDK是怎样实现美颜的?
    【LeetCode每日一题】——374.猜数字大小
    速腾聚创发布全固态补盲激光雷达E1,成立合资公司,备战百万产能
    python 性能优化实例练习
  • 原文地址:https://blog.csdn.net/a15297701931/article/details/125415868