刷题日常计~JS④

news2025/1/21 9:41:25

请添加图片描述

@作者 : SYFStrive

@博客首页 : 点击跳转HomePage

📜: 初编程JavaScript之每天10🗡5题 👉 从质变到量变💪

📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗

💃:坚持锻炼💪

🔗:点击直接阅读文章
请添加图片描述
在这里插入图片描述
相关专栏

①:👉 JS入门到精通(🔥待更)
②:👉 刷题日常计~JS(🔥待更)

题目目录

  • 题目难度:★★★☆
  • ①Proxy技术器
  • ②Proxy拦截器
  • ③监听对象
  • ④购物面板
  • ⑤接口
  • 最后

提示:以下是本篇文章正文内容

题目难度:★★★☆

①Proxy技术器

描述
请补全JavaScript代码,请给参数对象添加拦截代理功能,并返回这个代理,要求每当通过代理调用该对象拥有的属性时,"count"值加1,否则减1。

📰代码演示:

<!DOCTYPE html>
<html>

<head>
    <meta charset=utf-8>
</head>

<body>

<script type="text/javascript">
    let count = 0
    const _proxy = object => {
        // 创建一个Proxy实例, 该构造函数接收两个参数, 第一个参数是被代理的对象, 第二个参数是处理方法
        // 在处理方法中设置“ get” 计算方法, 该方法接收两个参数, 第一个参数是被代理的对象, 第二个参数是当前“ get” 读取的属性
        // 当第二个参数在第一个参数中时,“ count“ 加1, 否则减1
        let proxy = new Proxy(object, {
            //必须要写get,因为是查找(取值)方法
            get: function(a, b) {
                console.log(a);
                console.log(b);
                if (b in a) {
                    count++
                } else {
                    count--
                }
            }
        })
        return proxy
    }

</script>
</body>

</html>

②Proxy拦截器

描述
请补全JavaScript代码,请给参数对象添加拦截代理功能并返回这个代理。要求如下:

  1. 该函数接收多个参数,首个参数为对象,从第二个参数(包括)往后皆是该对象的属性名
  2. 通过该函数给首个参数对象添加拦截器功能,每当该对象访问到该函数第二个参数(包括)往后的属性时,返回"noright"字符串,表示无权限。

📰代码演示:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script type="text/javascript">
        const _proxy = (object, ...prototypes) => {
            // 补全代码
            return new Proxy(object, {
                get(a, b) {
                    if (prototypes.indexOf(b) > -1)
                        return 'noright'
                    return obj[b]
                }
            })
        }
    </script>
</body>

</html>

③监听对象

描述
请补全JavaScript代码,要求如下:

  1. 监听对象属性的变化
  2. 当"person"对象的属性发生变化时,页面中与该属性相关的数据同步更新
    注意:
  3. 必须使用Object.defineProperty实现且触发set方法时更新视图
  4. 可以使用预设代码"_render"函数

📰代码演示:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
</head>

<body>
    <style>
        ul {
            list-style: none;
        }
    </style>
    <ul></ul>

    <script>
        var ul = document.querySelector('ul');
        var person = {
            sex: '男',
            age: '25',
            name: '王大锤',
            height: 28,
            weight: 32
        };
        const _render = element => {
            var str = `<li>姓名:<span>${person.name}</span></li>
                           <li>性别:<span>${person.sex}</span></li>
                           <li>年龄:<span>${person.age}</span></li>
                           <li>身高:<span>${person.height}</span></li>
                           <li>体重:<span>${person.weight}</span></li>`
            element.innerHTML = str;
        }
        _render(ul);
        // 补全代码

        // 该方法返回给定对象自己的可枚举属性名称Object.keys()的数组,以与正常循环相同的顺序进行迭代。
        Object.keys(person).forEach(key => {
            console.log(key);
            let value = person[key]
            console.log(value);
            // Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
            // person 需要定义属性的当前对象
            // key 当前需要定义的属性名
            // {} 属性描述符
            Object.defineProperty(person, key, {
                get() {
                    return value
                },
                set(newVal) {
                    if (newVal != value) {
                        value = newVal
                        _render(ul)
                    }
                }
            })
        })
    </script>
</body>

</html>

④购物面板

描述
请补全JavaScript代码,要求如下:

  1. 当点击"-"按钮时,商品数量减1
  2. 当点击"+"按钮时,商品数量加1
  3. 每当点击任意按钮时,购物面板中相关信息必须同步更新
    注意:
  4. 必须使用DOM0级标准事件(onclick)

📰代码演示:

<!DOCTYPE html>
<html>

<head>
    <meta charset=utf-8>
</head>

<body>
    <table>
        <thead>
            <caption>
                商品
            </caption>
        </thead>
        <tbody>
            <tr>
                <td>炸鸡</td>
                <td>28元</td>
                <td><button id="zjtaiduola" οnclick="OnClickEvent(event,'zjsl',28)">-</button></td>
                <td><span id="zjsl">0</span></td>
                <td><button id="zjtaishaola" οnclick="OnClickEvent(event,'zjsl',28)">+</button></td>
            </tr>
            <tr>
                <td>可乐</td>
                <td>5元</td>
                <td><button id="kltaiduola" οnclick="OnClickEvent(event,'klsl',5)">-</button></td>
                <td><span id="klsl">0</span></td>
                <td><button id="kltaishaola" οnclick="OnClickEvent(event,'klsl',5)">+</button></td>
            </tr>
            <tr>
                <td>总价:</td>
                <td><span id="total">0</span></td>
            </tr>
        </tbody>
    </table>
    <!--描述-->
    <!--请补全JavaScript代码,要求如下:-->
    <!--1. 当点击"-"按钮时,商品数量减1-->
    <!--2. 当点击"+"按钮时,商品数量加1-->
    <!--3. 每当点击任意按钮时,购物面板中相关信息必须同步更新-->
    <!--注意:-->
    <!--1. 必须使用DOM0级标准事件(onclick)-->
    <script type="text/javascript">
        // 补全代码
        function OnClickEvent(event, Id, price) {
            let SumPrice = document.querySelector('#total')
            let ElementType = document.querySelector('#' + Id)
            let action = event.target.innerText

            // innerHTML: 设置或获取元素内的所有子节点(包括标签、注释和文本节点)
            // outerHTML: 设置或获取元素及所有子节点(包括标签、注释和文本节点)
            // innerText:  1、获取元素的文本,会过滤掉所以标签,将文档树中的所有文本拼接起来
            //             2、设置时会把元素所以子节点都删除再重写
            //             3、利用这一点,可以通过 innerText 属性过滤掉 HTML 标签
            console.log(ElementType.innerHTML)
            console.log(ElementType.innerText)

            if (action == "+") {

                ElementType.innerText = +ElementType.innerText + 1
                SumPrice.innerText = +SumPrice.innerText + price

            } else if (ElementType.innerText != '0') {

                ElementType.innerText = +ElementType.innerText - 1
                SumPrice.innerText = +SumPrice.innerText - price
            }
        }
    </script>
</body>

</html>

⑤接口

描述
请补全JavaScript代码,完成函数的接口功能。要求如下:

  1. 函数接收两种类型的参数,分别为"get?“和"update?name=xxx&to=yyy”,“name”、"to"为参数,“xxx”、"yyy"分别为参数对应的值。
  2. 当参数为"get?"时,返回data数据
  3. 当参数为"update?name=xxx&to=yyy"时,将data中所有"name"为"xxx"的项,更改为"name"值为"yyy"

📰代码演示:

<!DOCTYPE html>
<html>

<head>
    <meta charset=utf-8>
</head>
<objody>

    <!--描述-->
    <!--请补全JavaScript代码,完成函数的接口功能。要求如下:-->
    <!--1. 函数接收两种类型的参数,分别为"get?"和"update?name=xxx&to=yyy","name"、"to"为参数,"xxx"、"yyy"分别为参数对应的值。-->
    <!--2. 当参数为"get?"时,返回data数据-->
    <!--3. 当参数为"update?name=xxx&to=yyy"时,将data中所有"name"为"xxx"的项,更改为"name"值为"yyy"-->

    <script type="text/javascript">
        let data = [{
            name: 'nowcoder1'
        }, {
            name: 'nowcoder2'
        }]

        const _api = string => {
            // 补全代码
            let array = string.split('?')
            if (array[0] === 'get') {
                return data
            } else {
                let obj = {}
                    // 以&拆分成数组
                let spl = array[1].split('&')

                spl.forEach(item => {
                    let [key, value] = item.split('=')
                    obj[key] = value
                })

                data.forEach((item, index) => {
                    if (item.name == obj.name) {
                        data[index].name = obj.to
                    }
                })
            }
        }
        _api("update?name=xxx&to=yyy")
    </script>


</objody>

</html>

最后

在这里插入图片描述
1、码农日常刷题 👉 通过刷题认识到自己的不足,增加对该编程语法的熟练度(可以很大程度提升自己的编程水平(ง •_•)ง)
2、感谢大佬们的支持,你们的支持是我们更新的最大动力,希望这篇文章能帮到大家
3、最后,在这里分享一款刷题神器(里面还有很多值得学习的题目)点击跳转至刷题神器(一起刷起来吧( ఠൠఠ )💪),

在这里插入图片描述

下篇文章再见ヾ( ̄▽ ̄)ByeBye

在这里插入图片描述

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

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

相关文章

Ajax 前后端数据交互

ajax 数据交互 今天又是奋斗的一天&#xff0c;行吧&#xff0c;来学习ajax ajax 数据交互什么是ajax&#xff1f;ajax的优势ajax的使用创建一个ajax对象配置这个对象发送请求接受返回过来的数据ajax状态码readystatechangeresponseTextajax请求方式封装一个属于自己的ajax什么…

2022年最新最详细在IDEA中配置Tomcat(含有详细图解过程)、建立使用IEDA建立一个Web项目的案例

1、首先已经成功安装过tomcat 如果没有成功安装&#xff0c;参考这篇tomcat安装教程(安装成功可忽略)&#xff1a;https://blog.csdn.net/weixin_43304253/article/details/117001797 2、在IDEA中配置tomcat的详细步骤 2.1、run ->Edit Confifurations 2.2 、点击加号 2.…

微信小程序自定义导航栏,实现不同用户角色登陆后显示不同的tabbar(避坑版)

在我们开发小程序的过程中&#xff0c;会遇到权限登录问题&#xff0c;不同的角色登录后显示的底部导航栏tabbar是不一样的。网上看到了很多的博客&#xff0c;多多少少会有些坑&#xff0c;会遇到问题。今天这篇博客就可以一次性解决。 了解概念 自定义tabbar 使用方法 app…

React修改Antd组件样式的方法

1.修改默认组件样式和写自己组件样式的区别 当我们写自己的样式时&#xff0c;在组件页面中定义class名称&#xff0c;再在less文件中对这个class定义样式。 //index.js import React,{useState} from react; import styles from ./index.less;const Index (props) >{ret…

36.一文讲透JavaScript日期对象Date,时间戳、1970、date方法、date计算

文章目录JavaScript日期和时间处理方法Date对象的创建new Date()new Date(milliseconds)1970年之前的时间&#xff1f;new Date(date_str)new Date(year, month, date, hours, minutes, sec, ms)Date对象的方法获取日期内容设置日期内容日期的自动校准日期转为数字、日期差值Da…

Node.js安装及环境配置之Windows篇

Node.js安装及环境配置之Windows篇Node.js安装及环境配置之Windows篇一、安装环境二、安装node.js步骤三、前期准备四、开始安装五、环境配置Node.js安装及环境配置之Windows篇 一、安装环境 1、本机系统&#xff1a;Windows 10&#xff08;64位&#xff09; 2、Node.js&…

纯js判断文件流格式类型:pdf,doc,docx,xls,xlsx,ppt,pptx一次搞定!

目录使用js判断文件类型的场景方法特点输入输出方法步骤1. 查看每种格式文件的16进制码&#xff0c;提取不同文件类型的“特征数”。2. 先判断大类型&#xff0c;在具体大类下判断小类型项目地址&#xff1a;纯前端基于react实现的多类型文件预览&#xff1a;通过arraybuffer判…

uniapp全局组件全局使用(不在每个页面template使用,仅支持H5),函数式调用全局组件方法

最简单的使用&#xff0c;在 main.js 编写如下代码&#xff0c;即可将 xxx 组件在每个页面显示 // main.js// 引入组件 import xxx from "/components/xxx.vue";// 将该组件挂载在document.body下 document.body.appendChild(new xxx().$mount().$el); 函数式调用全…

JS高级知识总结

文章目录1. this指向问题2. 对象进阶2.1 对象的定义和使用2.2 对象访问器2.2.1 Getter2.2.2 Setter2.3 对象构造器2.4 对象原型2.4.1 prototype属性2.4.2 \_\_proto\_\_ 属性2.4.3 constructor属性2.4.4 原型链2.5 Object对象2.5.1 管理对象2.5.2 保护对象3. 函数进阶3.1 函数的…

.Net Core中间件

目录 一、什么是中间件 二、中间件的用途 三、中间件的三个概念 四、自定义中间件 五、ASP.NET Core附带中间件组件 六、中间件和过滤器的区别 一、什么是中间件 在浏览网站或者使用手机App加载内容的时候&#xff0c;浏览器或者手机App其实在向Web服务器发送HTTP请求。服…

NodeJS安装(npm包管理器)

1、nodejs下载 windows下的NodeJS安装是比较方便的&#xff0c; 只需要登陆官网&#xff08;Node.js&#xff09;&#xff0c;直接点击64-bit下载安装 2、安装过程基本直接“NEXT”&#xff0c;NodeJS已经集成了npm&#xff0c;所以npm也一并安装好了 3、在cmd窗口输入node -…

React-DevTools开发者工具安装

React开发者工具最简单的安装方式自然是科学上网&#xff0c;通过Google Chrome浏览器访问应用商店安装了。以下介绍另一种安装方式&#xff1a;基于 react-devtools的GitHub项目源码编译进行插件安装。 目录 React-DevTools&#xff1a;GitHub项目地址 React-DevTools&#x…

修改elementUI中el-date-picker内置样式

一.编写背景 今天正在日常的需求编写和bug调试中&#xff0c;产品提出了这样一个需求。为了满足用户在新增数据时的便捷准确&#xff0c;时间选择格式为“年月日时”&#xff0c;即用户不需要选择分合秒&#xff0c;换句话说就是下图中红色框的两项不需要。 二.问题分析。 当时…

基于vscode开发vue3项目的详细步骤教程 3 前端路由vue-router

1、Vue下载安装步骤的详细教程(亲测有效) 1_水w的博客-CSDN博客 2、Vue下载安装步骤的详细教程(亲测有效) 2 安装与创建默认项目_水w的博客-CSDN博客 3、基于vscode开发vue项目的详细步骤教程_水w的博客-CSDN博客 4、基于vscode开发vue项目的详细步骤教程 2 第三方图标库FontAw…

如何使用 JavaScript 读取文件

您可以使用 JavaScript File API 加载选定文件的内容。本节介绍 File API 的基本用法。 现在让我们看看如何使用 File API。 使用 JavaScript 读取文件概述 选择带有输入元素的文件 在 HTML 中&#xff0c;您可以通过将 input 元素的 type 属性设置为 file 来选择文件。 &…

vue 在for循环中设置ref并获取$refs

一、单循环动态设置ref 1.设置&#xff1a;【:ref“‘XXX’ index”】XXX -->自定义ref的名字 2.获取&#xff1a;let ref eval(‘this.$refs.XXX’ index)[0] 3.示例&#xff1a; 代码如下所示 <template><div class"ref_test"><div v-fo…

常用的几种布局方式---Flex 布局(垂直居中展示)

常用的几种布局方式---Flex 布局(垂直居中展示&#xff09; 前言一、默认使用静态布局二、flex布局1.父元素container1.1.display:flex1.2.flex-direction属性1.3.主轴与侧轴1.4.justify-content属性1.5.align-items属性1.6.flex-wrap属性2.子元素items 前言 怎样让一个元素在…

Vue2 概述

什么是Vue 引用官网的一段话:Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项…

如何统计前端项目有多少行代码

方法一&#xff1a;输入命令 前端项目核心代码主要在src目录下&#xff0c;打开项目找到src目录&#xff0c;右键点击 git bash here &#xff0c;然后输入命令&#xff1a; 1.包括空行&#xff08;会列出每个文件的代码行数&#xff09;&#xff1a; find . "(" …

Vue注册组件的几种方式,你都知道吗?

在开发中,经常需要将业务进行组件化,我们就需要去注册组件,下面列举几种常用的注册组件的方法 局部注册组件 1.首先需要将要注册的组件进行引入 2.在script标签中进行注册,注意:组件注册的名字和引入的名字需要保持一致即可进行简写 3.在template标签中以html的标签格式进行使…