前端对象的知识点

2023-11-18

// 认识对象 
// 对象(object)是“键值对”的集合,表示属性和值的映射关系
   // JS中,大括号表示对象
   // var xiaoming = {
   // 属性名(键名,key)name: '小明',
   // age: 12,
   // sex:'男',
   // hobbies: ['足球''编程]};
// 对象的语法
    //   k和v之间用冒号分隔,
    //   每组k : v之间用逗号分隔,最后一个k :v对后可以不书写逗号
    //   var obj = {
    //   k: v,
    //   k : v,
    //   k: v,
    //   k: v
    //   };
// 属性是否加引号
    // 如果对象的属性键名不符合JS标识符命名规范,则这个键名必须用引号包裹
    // var xiaoming = {
    // name: '小明',age: 12,
    // sex: '',
    // hobbys: [足球''游泳''编程'],
    // 'favorite-book ' :‘舒克和贝塔' // 属性名中有短横,不符合J5标识符命名规范,属性名必须用引号包裹
    // };
// 属性的访问
    //   可以用“点语法”访问对象中指定键的值
    //   xiaoming.name;//'小明'
    //   xiaoming.age;// 12
    //   xiaoming.hobbys;//['足球','游泳','编程']
    // 如果属性名不符合JS标识符命名规范,则必须用方括号的写法来访问
    // xiaoming[ 'favorite-book ' ];//'舒克和贝塔'
    // 如果属性名以变量形式存储,则必须使用方括号形式
    //    var obj = {
    //    a: 1,
    //    b: 2,
    //    c: 3
    //    };
    //    属性名用变量存储
    //    var key = 'b ';
    //    console.log( obj.key ) ;//undefined
    //    console.log(obj[key]);// 2
// 属性的创建
       // 如果对象本身没有某个属性值,则用点语法赋值时,这个属性会被创建出来
       // var obj = {
       // a: 10};
       // obj.b = 40;
// 属性的删除
     // 如果要删除某个对象的属性,需要使用delete操作符
     // var obj = {
     // a : 1,b: 2};
     // delete obj.a;
// 对象的方法
     // 如果某个属性值是函数,则它也被称为对象的“方法”
     // var xiaoming = {
     // name: '小明',age: 12,
     // sex: '',
     // hobbys: ['足球','游泳',"编程']'favorite-book' :'舒克和贝塔',
     // sayHello: function () {
     // console.log('你好,我是小明,今年12岁,我是个男生');  对象的方法
     // }
     // };
// 方法的调用
     // 使用“点语法”可以调用对象的方法
     // xiaoming.sayHello();
// 方法和函数
    // 方法也是函数,只不过方法是对象的“函数属性”,它需要用对象打点调用
    // 在正式学习了什么是“方法”之后,就能深入理解之前我们学习的一些函数的书写形式了,比如:
// 对象的遍历
    // 和遍历数组类似,对象也可以被遍历,遍历对象需要使用for. . .in...循环
    // 使用for. . .in.. .循环可以遍历对象的每个键
    // 在后续的ES6相关课程中,还会学习新的对象遍历的方式
// for...in.…循环
    // for (var k in obj) {
    // console.log('属性’+k + '的值是'+ obj[k]);
    // }



// 对象是引用类型值
// 对象是引用类型值,这意味着:
// 不能用var obj2 = obj1这样的语法克隆一个对象
// 使用==或者===进行对象的比较时,比较的是它们是否为内
// 存中的同一个对象,而不是比较值是否相同
        // 例子1
        // var obj1 = {
            // a: 1,
            // b: 2,
            // c: 3
        // };
        // var obj2 = {
            // a: 1,
            // b: 2,
            // c: 3
        // };
        // console.log(obj1 == obj2);      // false
        // console.log(obj1 === obj2);     // false
        // 
        // console.log({} == {});          // false
        // console.log({} === {});         // false
        // 
        // 例子2
        // var obj3 = {
            // a: 10
        // };
        // var obj4 = obj3;
        // obj3.a ++;
        // console.log(obj4);      // {a: 11}
     // 对象的浅克隆
     // 复习什么是浅克隆:只克隆对象的“表层”,如果对象的某些属性值又是引用类型值,则不
     // 使用for. . . in.. .循环即可实现对象的浅克隆
            //  var obj1 = {
                    // a: 1,
                    // b: 2,
                    // c: [44, 55, 66]
                // };
        
                // 实现浅克隆
                // var obj2 = {};
                // for (var k in obj1) {
                    // 每遍历一个k属性,就给obj2也添加一个同名的k属性
                    // 值和obj1的k属性值相同
                    // obj2[k] = obj1[k];
                // }
        
                // 为什么叫浅克隆呢?比如c属性的值是引用类型值,那么本质上obj1和obj2的
                // obj1.c.push(77);
                // console.log(obj2);                  // obj2的c属性这个数组也会被增
                // console.log(obj1.c == obj2.c);      // true,true就证明了数组是同一
// 对象的深克隆
         // 什么是深克隆:克隆对象的全貌,不论对象的属性值是否又是引用类型值,都能将它
        //  var obj1 = {
            // a: 1,
            // b: 2,
            // c: [33, 44, {
                // m: 55,
                // n: 66,
                // p: [77, 88]
            // }]
        // };

        // 深克隆
        // function deepClone(o) {
            // 要判断o是对象还是数组
            // if (Array.isArray(o)) {
                // 数组
                // var result = [];
                // for (var i = 0; i < o.length; i++) {
                    // result.push(deepClone(o[i]));
                // }
            // } else if (typeof o == 'object') {
                // 对象
                // var result = {};
                // for (var k in o) {
                    // result[k] = deepClone(o[k]);
                // }
            // } else {
                // 基本类型值
                // var result = o;
            // }
            // return result;
        // }

        // 
        // var obj2 = deepClone(obj1);
        // console.log(obj2);
        // 
        // console.log(obj1.c == obj2.c);      // false
        // 
        // obj1.c.push(99);
        // console.log(obj2);                  // obj2不变的,因为没有“藕断丝连”的现象

        // obj1.c[2].p.push(999);
        // console.log(obj2);                  // obj2不变的,因为没有“藕断丝连”的现象
        // 函数的上下文
      // 函数中可以使用this关键字,它表示函数的上下文
      // 与中文中“这”类似,函数中的this具体指代什么必须通过调用函数时的“前言后语”来判断
// 函数中的this
     // var xiaoming = {
     // nickname:'小明',
     // age: 12,
     // sayHello: function () {
     // console.log('我是' + this. nickname + '' + this.age +'岁了')
     // }
     // };
     // 
     // var sayHello = xiaoming.sayHello; //=>将函数“提”出来,单独存为变量
     // sayHello();直接圆括号调用这个函数,而不是对象打点调用了
// 函数的上下文由调用方式决定
    //同一个函数,用不同的形式调用它,则函数的上下文不同情形1:对象打点调用函数,函数中的this指代这个打点的对象xiaoming.sayHello();
    //情形2:圆括号直接调用函数,函数中的this指代window对象var sayHello = xiaoming.sayHello;
    //sayHello();
// 函数的上下文由调用函数的方式决定
      // 函数的上下文(this关键字)由调用函数的方式决定,function是“运行时上下文”策略
      // 函数如果不调用,则不能确定函数的上下文
// 规则1
    //   规则1︰对象打点调用它的方法函数,则函数的上下文是这个打点的对象
    //   对象.方法()
    // function fn() {
    // console.log(this.a + this.b);
    // }
    // var obj = {
    // a: 66,b: 33,
    // fn: fn
    // };
    // obj.fn();     // 99
    // 案例2
    // var obj1 = {
    // a: 1,b: 2,
    // fn: function:() {
    // console.log(this.a + this.b);
    // }
    // };
    // var obj2 = {
    // a: 3,
    // b: 4,
    // fn: obj1.fn
    // };
    // obj2.fn(); //7

    // 案例3
     // function outer( ) {
     // var a = 11;var b = 22;return {
     // a: 33,b: 44,
     // fn: function () {
     // console.log(this.a + this.b);
     // }
     // 
     // };
     // }
     // outer( ).fn(); =>77
    //案例4
    // function fun() {
    //  console.log(this.a + this.b);
    //  }
    //  var obj = {
    //  a: 1,b: 2,c: [{
    //  a: 3,b: 4,c: fun}]
    //  };
    //  var a = 5;
    //  obj.c[0].c(); =>7
    // 规则2
       // 规则2:圆括号直接调用函数,则函数的上下文是window对象
       // 函数()
    //    var obj1 = {
    //   a: 1,b: 2,
    //   fn: function () {
    //   console.log(this.a + this.b);
    //   }
    //   };
    //   var a = 3;
    //   var b = 4;
    //   var fn = obj1.fn;
    //   fn();-构成函数()的形式,适用规则2  //7
    // function fun() {
    //  return this.a + this.b;
    //  }
    //  var a = 1;var b = 2;var obj = {
    //  a: 3,
    //  b: fun(),适用规则2
    //  fun: fun
    //  };
    //  var result = obj.fun(); 适用规则1
    // console.log( result); //6
// 规则3
     // 规则3:数组(类数组对象)枚举出函数进行调用,上下文是这个数组(类数组对象)
     // 数组[下标]()
    //  var arr = [ 'A','B', 'c ', function () {
    //  console.log(this[]);
    //  }];
    //  arr[3](); =>适用规则3 A
// 类数组对象
    // 什么是类数组对象:所有键名为自然数序列(从0开始),且有length属性的对象
    // arguments对象是最常见的类数组对象,它是函数的实参列表
    // function fun() {
    // arguments[3]();
    // }
    // fun( 'A','B','c', function ( ) i
    // console.log(this[1]);  // B
    // });

// 规则4
   // 规则4:IIFE中的函数,上下文是window对象
   // (function() {
   // })();
     // var a = 1;var obj = {
     // a: 2,
     // fun: (function ( ) {
     // var a = this.a;
     // return function () {
     // console. log(a + this.a) ;
     // }
     // })() =>适用规则4
     // };
     // obj.fun(); =>规则1   //3
// 规则5
     // 规则5:定时器、延时器调用函数,上下文是window对象
     // setInterval(函数,时间);
     // setTimeout(函数,时间);
    //  var obj = {
    //  a:1,b: 2,
    //  fun: function () {
    //  console.log(this.a + this.b);
    //  }
    //  }
    //  var a = 3;
    //  var b = 4;
    //  setTimeout(function() i
    //  obj.fun( );  =>适用规则1 结果为3
    //  },2000) ;
// 规则6
    // 规则6:事件处理函数的上下文是绑定事件的DOM元素
    // DOM元素.onclick = function () {
    // };
    // <body>
    // <div id="box1"></div>
    // <div id="box2"></div>
    // <div id="box3"></div>
// 
    // <>
        // function setColorToRed() {
            // 备份上下文
            // var self = this;
            // setTimeout(function() {
                // self.style.backgroundColor = 'red';
            // }, 2000);
        // }
// 
        // var box1 = document.getElementById('box1');
        // var box2 = document.getElementById('box2');
        // var box3 = document.getElementById('box3');
// 
        // box1.onclick = setColorToRed;
        // box2.onclick = setColorToRed;
        // box3.onclick = setColorToRed;
    // 
// call和apply能指定函数的上下文
        // function sum() i
        // alert(this.chinese + this.math + this.english);
        // }
        // var xiaoming = {
       // chinese: 80,math: 95,english: 93};
       //sum.call(xiaoming);
       //sum.apply( xiaoming);函数.call(上下文);函数.apply(上下文);
//  call和apply的区别
      // call要用逗号罗列参数
      // apply要把参数写到数组中
    //   上下文规则总结
    //   规则    上下文
    //   对象.函数()    对象
    //   函数()    window
    //   数组[下标]()    数组
    //   IIFE    window
    //   定时器    window
    //   DOM事件处理函数    绑定DOM的元素
    //   call和apply    任意指定
// 用new操作符调用函数
    // 现在,我们学习一种新的函数调用方式:
    // new函数()
    // 你可能知道new操作符和“面向对象”息息相关,但是现在
    // ,我们先不探讨它的“面向对象”意义,而是先把用new调
    // 用函数的执行步骤和它上下文弄清楚
// 用new操作符调用函数
    // JS规定,使用new操作符调用函数会进行“四步走”
    // 1)函数体内会自动创建出一个空白对象
    // 
    // 2)函数的上下文(this)会指向这个对象
    // 3)函数体内的语句会执行
    // 4)函数会自动返回上下文对象,即使函数没有return语句






本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端对象的知识点 的相关文章

随机推荐

  • 内网安全-隧道搭建&穿透上线&FRP&NPS&Ngrok

    目录 环境介绍 内网穿透 Ngrok 入门 上线 tcp协议 内网穿透 Frp 简易型 上线 内网穿透 Nps 自定义 上线 环境介绍 实验目的 让msf上线外网 通常情况下 内网可以访问外网 但是外网无法访问到内网 所以外网的木马通常情况
  • 将二叉树转为有序的双向链表

    一 题目要求 输入一棵二叉排序树 现在要将该二叉排序树转换成一个有序的双向链表 而且在转换的过程中 不能创建任何新的结点 只能调整树中的结点指针的指向来实现 include
  • AHB to APB bridge

    目录 SPEC 验证框架图 测试点分解以及设计测试用例 测试点分解 设计测试用例 具体的Sequence及testcase Sequence testcase SPEC DUT如下 具体功能描述可参考ARM官方文档 AHB to APB s
  • 驾驭计算机视觉的翅膀:论文找代码的几种必杀技!

    摘要 对于CVer来说 代码和找代码 能力都是一种很重要的能力 毕竟idea再好只有通过代码实现出来才能发文章和刷榜 当我们阅读一篇高质量或者英文论文时 如何去找到该文章实现的代码 进而结合文章内容和代码实现去更好的理解作者所做的工作 只有
  • 什么是MVC设计模式

    直接上图 其中model 和view大家经常写 就不说了 有人可能并不清楚controller 到底是啥 其实就是经常写的 data source delegate outlet什么的 先撇开那些乱七八糟的箭头单看他们之间的分界线 view
  • C# 中BindingSource 的用法

    C BindingSource 1 引言 BindingSource组件是数据源和控件间的一座桥 同时提供了大量的API和Event供我们使用 使用这些API我们可以将Code与各种具体类型数据源进行解耦 使用这些Event我们可以洞察数据
  • mac os 搭建fortran环境

    首先从App Store下载Xcode 然后安装命令行工具 终端下输入 xcode select install 然后终端下输入如下命令 安装Homebrew ruby e curl fsSL https raw githubusercon
  • 使用缺省的拷贝构造函数带来的危险性

    我此前另外一篇文章通过类String看拷贝构造函数 赋值函数的作用和区别 对于更深的拷贝构造函数讨论大家可以参见这篇帖子 C 类对象的复制 拷贝构造函数 通过编写类String的拷贝构造函数和赋值函数介绍了一些拷贝构造数 本文着重介绍拷贝构
  • 前端面试题有哪些,有没有前端面试题库?

    全篇干货总结前端跳槽面试必备技能 如何看待面试 如何准备面试 注意事项有哪些 面试各环节考察的是什么 一面 考察基础知识 二面 考察能力广度和深度 三面 考察项目业务能力 终面 hr面 考察沟通能力 性格 潜力等等 一面的基础知识 在这分享
  • java定义一个周长类三角形_point类 三点的三角形的周长、面积 编程求解矩形和圆面积 java 三角形的定义...

    三角形的定义 1 先创建一个Point类 然后定义Trianglele类 在Trianglele类中定义三个Point的实体来表示一个三角形的三个点 再定义构造方法对这三个点进行初始化 然后定义两个方法求三角形的周长 面积 定义一个测试类
  • 算法:点与点之间欧式距离最小

    2017 03 10 问 知道一堆点 如何求出其中距离最近的一对 按欧式距离 除了暴力求解 还有没有其他的办法 这个算是最笨的办法 复杂度也比较高 我在另外一个博客里看到 他是用分治法的方式进行处理 而且也指出这个算法的难点在于如何将各种情
  • YOLO,VOC数据集标注格式解析

    YOLO数据集txt标注格式 0 0 160938 0 541667 0 120312 0 386111 分别指所标注内容的类别 归一化后的中心点x坐标 归一化后的中心点y坐标 归一化后的目标框宽度w 归一化后的目标况高度h 此处归一化指的
  • Fildder无法抓不到Firefox的包

    起因 Firefox这个浏览器对开发者太友好了 开发者工具看着很清爽 功能也很实用 就安装来用这个浏览器做项目测试 某次开发中发现某个请求有些问题 想用强大的Fiddler来看下前端到底是怎么发送的请求 问题来了 Fildder死活抓不到f
  • 什么是网络空间测绘?到底有什么作用?

    据X视新闻客户端报道 当地时间4月18日 谷歌地图服务开始以最大分辨率提供俄罗斯所有军事和战略设施的卫星图像 目前 包括各种洲际弹道D弹发射井 指挥所 秘密试验场等在内的俄战略要地均可以每像素约0 5米的分辨率查看 随后 谷歌公司已否认了
  • 前端UI框架整理

    1 TDesign 腾讯最近刚刚公开的一套UI框架 个人感觉不错 桌面与移动端都有 下面是官网介绍 TDesign 是什么 TDesign 是腾讯各业务团队在服务业务过程中沉淀的一套企业级设计体系 TDesign 具有统一的 设计价值观 一
  • BLAM跑自己的数据包无法显示全局点云地图解决(速腾聚创RS-LiDAR-16 雷达 )-SLAM不学无术小问题

    BLAM算法跑自己的数据包无法显示全局点云地图解决 适配速腾聚创RS LiDAR 16 雷达 提示 本文笔者使用环境Ubuntu18 04 ROS melodic版本 首先放一个效果链接 由b站up VladimirDuan上传 非官方 官
  • linux打不开摄像头,linux opencv打不开摄像头

    配置 ubuntu16 04 opencv3 4 罗技c270 webcam 摄像头我在windows上测试了是没问题的 但是到了linux嵌入式板子上就不行了 灯一直不亮 一开始我以后是opencv的版本问题 换了最新版本的opencv
  • LegalAI领域大规模预训练语言模型的整理、总结及介绍(持续更新ing…)

    诸神缄默不语 个人CSDN博文目录 文章目录 1 通用大规模预训练语言模型 2 对话模型 3 分句 4 文本分类 5 信息抽取 6 案例检索 7 文本摘要 1 通用大规模预训练语言模型 英语 LegalBERT 原始论文 2020 EMNL
  • art-template渲染分页模板

    环境 简单webpack环境 webpack config js const path require path const HtmlWebpackPlugin require html webpack plugin const VueLo
  • 前端对象的知识点

    认识对象 对象 object 是 键值对 的集合 表示属性和值的映射关系 JS中 大括号表示对象 var xiaoming 属性名 键名 key name 小明 age 12 sex 男 hobbies 足球 编程 对象的语法 k和v之间用