js对象篇

news2024/11/16 21:49:13

面向对象

对象

如果对象的属性键名不符合JS标识符命名规范,则这个键名必须用引号包裹

访问属性有2种方法,有点语法和方括号填写法,特别地,如果属性名不符合JS命名规范或者使用变量存储属性名,则必须使用方括号访问

属性删除直接在对象属性前加delete关键字 eg:delete obj.c;

遍历对象(for…in…循环)

var obj={
    a: 11,
    b: 22,
    c: 88
};
for(var k in obj){
    console.log('对象obj的属性'+k+'的值是'+obj[k]);
}

//对象obj的属性a的值是11
//对象obj的属性b的值是22
//对象obj的属性c的值是88

对象的深浅克隆(下面先浅后深)

var obj1={
    a: 1,
    b: 2,
    c: [44,55,66]
};

// 实现浅克隆
var obj2={};

for(var k in obj1){
    // 每遍历一个k属性,就给obj2也添加一个同名的k属性
    // 值和obj1的k属性值相同
    obj2[k]=obj[k];
}

// 为什么叫浅克隆呢?
// 比如c属性的值是引用类型值,那么本质上obj1和obj2的c属性是内存中的同一个数组,没有被克隆分开
obj1.c.push(77);
console.log(obj2);    //[44,55,66,77]
console.loh(obj1.c==obj2.c);    //true

对象的深克隆需要递归

注意:数组和对象typeof得到都是object

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(obj1.c==obj2.c);    //false

obj1.c.pop();

console.log(obj2.c);    

//[33,44,{
        m: 55,
        n: 66,
        p: [77,88]
}]

上下文

函数中可以使用this关键字,它表示函数的上下文

 结果为NaN,undefined+undefined得到NaN

如果没有调用它,则不知道this指代什么window还是obj

上下文规则1

上下文规则2(先提取对象属性函数存为全局变量再调用上下文为window)

上下文规则3 

上下文规则4

 

 

上下文规则5(定时器,延时器直接对象调用函数上下文是window)

上下文规则6

点击盒子设置延时器2s之后盒子变红 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        div {
            width: 100px;
            height: 100px;
            border: 1px solid #000;
            margin-right: 10px;
            float: left;
        }
    </style>
</head>
<body>
<div id="box1"></div>
<div id="box2"></div>
<div id="box3"></div>

<script>
    var box1 = document.getElementById('box1');
    var box2 = document.getElementById('box2');
    var box3 = document.getElementById('box3');

    function setColorToRed() {
        // 备份上下文
        var self=this;
        setTimeout(function (){
            self.style.backgroundColor = 'red';
        },2000);
    }

    box1.onclick = setColorToRed;
    box2.onclick = setColorToRed;
    box3.onclick = setColorToRed;
</script>
</body>
</html>

call和apply能指定函数的上下文

this指的是window,但是fun2函数里面没有this参数,所以相当于没传递参数,arguments指的是[33,44]分别代表a33和b44

 

上下文规则总结

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/134130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【王道操作系统】2.3.6 进程同步与互斥经典问题(生产者消费者问题、吸烟者问题、读者写者问题、哲学家进餐问题)

进程同步与互斥经典问题(生产者消费者问题、吸烟者问题、读者写者问题、哲学家进餐问题) 文章目录进程同步与互斥经典问题(生产者消费者问题、吸烟者问题、读者写者问题、哲学家进餐问题)1.生产者-消费者问题1.1 问题描述1.2 问题分析1.3 如何实现1.4 实现互斥的P操作一定在实现…

深化全面To C战略魏牌发布与用户共创大六座SUV蓝山

对魏牌而言&#xff0c;与用户共创不是吸引眼球的营销噱头&#xff0c;而是“直面用户需求&#xff0c;真实倾听用户意见”的有效途径。 2022年12月30日&#xff0c;第二十届广州国际汽车展览会&#xff08;以下简称“广州车展”&#xff09;正式启幕。魏牌以“品位蓝山 有咖有…

神经网络必备基础知识:卷积、池化、全连接(通道数问题、kernel与filter的概念)

文章目录卷积操作实际操作filter与kernel1x1的卷积层可视化的例子池化全连接卷积操作 这个不难理解。我们知道图像在计算机中是由一个个的像素组成的&#xff0c;可以用矩阵表示。 假设一个5x5的输入图像&#xff0c;我们定义一个3x3的矩阵&#xff08;其中的数值是随机生成的…

excel图表美化:设置标记样式让拆线图精巧有趣

折线图作为我们平时数据视图化非常常规的表现方式&#xff0c;想必大家已经司空见惯了。折线图很简单&#xff0c;每个人都会做&#xff0c;但是不同的人做出来的折线图却千差万别。大多数人的折线图都是直接插入默认折线图样式生成的&#xff0c;这样的折线图先不说有没有用心…

五、IDEA中创建Web项目

文章目录5.1 创建Web项目5.1.1 创建项目5.1.2 编写Servlet类5.2 手动部署项目5.3 自动部署项目5.3.1 IDEA集成Tomcat5.3.2 IDEA部署JavaWeb项目5.4 war包部署5.4.1 导出war包5.1 创建Web项目 5.1.1 创建项目 1、打开IDEA&#xff0c;单击“New Project”或者通过File–>ne…

Perl语言入门

一、简介 Perl语言是拉里.沃尔&#xff08;Larry Wall&#xff09;在1987年开发的一种编程语言&#xff0c;借鉴了C、sed、awk、shell脚本语言以及其他语言的特性&#xff0c;专门用于文本处理。 它可以在各种平台上运行&#xff0c;例如Windows&#xff0c;Mac OS和各种UNIX…

bean生命周期

1.Aware和InitializingBean接口 Aware 接口用于注入一些与容器相关信息&#xff0c;例如 BeanNameAware: 注入bean的名字BeanFactorAware&#xff1a; 注入beanFactor容器ApplicationContextAware&#xff1a; 注入applicationContext容器EmbeddedValueResolverAware: ${} 代码…

爬虫进阶一(基础一)

文章目录简介cookie爬取雪球热帖代理模拟登陆防盗链异步爬虫协程asyncioM3U8HLS爬取seleniumbilibili无头浏览器规避检测MySQLMongoDBRedis简介 这个系列分四部分 基础进阶Scrapy 框架逆向分析实战运用 先补充一些爬虫需要的基础知识和技能预热&#xff0c;爬取个简历模板网站…

浅谈Git

Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理,也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 版本控制 什么是版本控制&#xff1f; 版本控制是一种在开发的过程中用于管理我们对文…

如何评价唐卫国公李靖的战功、军事才能、政治才能?

link 一鞭直渡清河洛Research and no development已关注470 人赞同了该回答个人以为&#xff0c;在军事上&#xff0c;李靖是当之无愧的唐朝第一名将&#xff0c;他用兵如神&#xff0c;精于谋略&#xff0c;无论是在实际的军事指挥上&#xff0c;还是军事理论上&#xff0c;他…

Vue3 中computed计算属性的使用

目录前言&#xff1a;什么是计算属性选项式中的计算属性组合式中的计算属性计算属性和方法的区别&#xff1a;计算属性/计算方法注意事项&#xff1a;总结前言&#xff1a; 目标&#xff1a;现在vue3的使用越来越普遍了&#xff0c;vue3这方面的学习我们要赶上&#xff0c;今天…

银行家算法 源码+实验报告(用了自取)

XIAN TECHNOLOGICAL UNIVERSITY 课程设计报告 实验课程名称 操作系统—银行家算法 专 业&#xff1a;计算机科学与技术 班 级&#xff1a; 姓 名&#xff1a; 学 号&#xff1a; 实验学时&#xff1a; …

小程序03/ uni-app自定义全局组件 、 uni-app项目引入 Uview-ui 框架教程方法 和 Uview框架介绍

一. uni-app自定义全局组件 1.创建组件 注意: 在components文件夹下创建组件 、文件夹名要与文件名保持一致 2.使用组件 注意: 在pages文件夹下任意vue文件、 template标签内使用该组件即可 二.uni-app项目引入Uview-ui框架教程方法 和 Uview框架介绍 (1) Uview介绍: Uvi…

【自学Java】Java运算符

Java运算符 Java运算符 Java 程序是由许多语句组成的&#xff0c;而语句的基本操作单位是表达式与运算符。运算符就是数学中的运算符号&#xff0c;如 、-、*、 / 等等。 Java 中提供了许多的运算符&#xff0c;这些运算除了可以处理一般的数学运算外&#xff0c;还可以处理…

Android---AndroidX

目录 Android 支持库 Android Support Library AndroidX 如何迁移老项目到 AndroidX? 支持库的作用 Android 支持库 Android 支持库是每个Android 应用程序中必不可少的一部分&#xff0c;你会发现它们无处不在。支持库为开发人员提供了将 Android 的最新和最强大功能添加…

《最重要的事,只有一件》笔记——目标不是做得更多,而是让自己需要的事情更少

目录 一、引言 二、书中摘要 1、只做一件事、一次只做一件事 2、专心于一件事不那么容易 3、我们不可能同时专注于两件事 4、平衡工作与生活是无稽之谈 5、怎么做 6、成功的习惯-围绕着你的终极目标 7、找到投入的意义 8、确定优先事务-这要看你目前和将来的打算 9、…

【自然语言处理】【ChatGPT系列】FLAN:微调语言模型是Zero-Shot学习器

FLAN: 微调语言模型是Zero-Shot学习器《Finetuned Language Models are Zero-shot Learners》论文地址&#xff1a;https://arxiv.org/abs/2109.01652 相关博客 【自然语言处理】【ChatGPT系列】FLAN&#xff1a;微调语言模型是Zero-Shot学习器 【自然语言处理】【ChatGPT系列】…

R语言geodetector包基于栅格图像实现地理探测器操作

本文介绍基于R语言中的geodetector包&#xff0c;依据多张栅格图像数据&#xff0c;实现地理探测器&#xff08;Geodetector&#xff09;操作的详细方法。 需要说明的是&#xff0c;在R语言中进行地理探测器操作&#xff0c;可以分别通过geodetector包、GD包等2个包实现。其中&…

react18+eslint+prettier 配置

新建项目 create-react-app.cmd react18 --template typescript配置别名 安装 craco npm install craco/craco -D新建 craco.config.js const path require("path"); const resolve (dir) > path.resolve(__dirname, dir); module.exports {// 配置别名web…

Kubernetes:Service

文章目录1、Service 定义1.1、无选择符的服务1.2、Endpoints2、服务发布类型2.1、ClusterIP2.2、NodePort2.3、ExternalName2.4、loadbalancer3、无头服务3.1、有选择符的服务3.2、无选择符的服务4、服务发现4.1、环境变量4.2、DNS5、Service TLSService&#xff1a;将运行在一…