0


刷题日常计~JS④

请添加图片描述

@作者 : SYFStrive

@博客首页 : 点击跳转HomePage

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

🔥:给大家推荐一款的刷题神器(有很多值得学习的编程题目😘)

🔥:🏆🏆🏆 神器链接🔗(一起刷起来吧( ఠൠఠ )ノ)

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

💃:坚持锻炼💪

🔗:
请添加图片描述
在这里插入图片描述
相关专栏

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

题目目录

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

题目难度:★★★☆

①Proxy技术器

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

📰代码演示:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset=utf-8>
  5. </head>
  6. <body>
  7. <script type="text/javascript">
  8. let count = 0
  9. const _proxy = object => {
  10. // 创建一个Proxy实例, 该构造函数接收两个参数, 第一个参数是被代理的对象, 第二个参数是处理方法
  11. // 在处理方法中设置“ get” 计算方法, 该方法接收两个参数, 第一个参数是被代理的对象, 第二个参数是当前“ get” 读取的属性
  12. // 当第二个参数在第一个参数中时,“ count“ 加1, 否则减1
  13. let proxy = new Proxy(object, {
  14. //必须要写get,因为是查找(取值)方法
  15. get: function(a, b) {
  16. console.log(a);
  17. console.log(b);
  18. if (b in a) {
  19. count++
  20. } else {
  21. count--
  22. }
  23. }
  24. })
  25. return proxy
  26. }
  27. </script>
  28. </body>
  29. </html>

②Proxy拦截器

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

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

📰代码演示:

  1. <!DOCTYPE html>
  2. <html lang="en">
  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>Document</title>
  8. </head>
  9. <body>
  10. <script type="text/javascript">
  11. const _proxy = (object, ...prototypes) => {
  12. // 补全代码
  13. return new Proxy(object, {
  14. get(a, b) {
  15. if (prototypes.indexOf(b) > -1)
  16. return 'noright'
  17. return obj[b]
  18. }
  19. })
  20. }
  21. </script>
  22. </body>
  23. </html>

③监听对象

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

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

📰代码演示:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. </head>
  6. <body>
  7. <style>
  8. ul {
  9. list-style: none;
  10. }
  11. </style>
  12. <ul></ul>
  13. <script>
  14. var ul = document.querySelector('ul');
  15. var person = {
  16. sex: '男',
  17. age: '25',
  18. name: '王大锤',
  19. height: 28,
  20. weight: 32
  21. };
  22. const _render = element => {
  23. var str = `<li>姓名:<span>${person.name}</span></li>
  24. <li>性别:<span>${person.sex}</span></li>
  25. <li>年龄:<span>${person.age}</span></li>
  26. <li>身高:<span>${person.height}</span></li>
  27. <li>体重:<span>${person.weight}</span></li>`
  28. element.innerHTML = str;
  29. }
  30. _render(ul);
  31. // 补全代码
  32. // 该方法返回给定对象自己的可枚举属性名称Object.keys()的数组,以与正常循环相同的顺序进行迭代。
  33. Object.keys(person).forEach(key => {
  34. console.log(key);
  35. let value = person[key]
  36. console.log(value);
  37. // Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
  38. // person 需要定义属性的当前对象
  39. // key 当前需要定义的属性名
  40. // {} 属性描述符
  41. Object.defineProperty(person, key, {
  42. get() {
  43. return value
  44. },
  45. set(newVal) {
  46. if (newVal != value) {
  47. value = newVal
  48. _render(ul)
  49. }
  50. }
  51. })
  52. })
  53. </script>
  54. </body>
  55. </html>

④购物面板

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

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

📰代码演示:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset=utf-8>
  5. </head>
  6. <body>
  7. <table>
  8. <thead>
  9. <caption>
  10. 商品
  11. </caption>
  12. </thead>
  13. <tbody>
  14. <tr>
  15. <td>炸鸡</td>
  16. <td>28元</td>
  17. <td><button id="zjtaiduola" οnclick="OnClickEvent(event,'zjsl',28)">-</button></td>
  18. <td><span id="zjsl">0</span></td>
  19. <td><button id="zjtaishaola" οnclick="OnClickEvent(event,'zjsl',28)">+</button></td>
  20. </tr>
  21. <tr>
  22. <td>可乐</td>
  23. <td>5元</td>
  24. <td><button id="kltaiduola" οnclick="OnClickEvent(event,'klsl',5)">-</button></td>
  25. <td><span id="klsl">0</span></td>
  26. <td><button id="kltaishaola" οnclick="OnClickEvent(event,'klsl',5)">+</button></td>
  27. </tr>
  28. <tr>
  29. <td>总价:</td>
  30. <td><span id="total">0</span></td>
  31. </tr>
  32. </tbody>
  33. </table>
  34. <!--描述-->
  35. <!--请补全JavaScript代码,要求如下:-->
  36. <!--1. 当点击"-"按钮时,商品数量减1-->
  37. <!--2. 当点击"+"按钮时,商品数量加1-->
  38. <!--3. 每当点击任意按钮时,购物面板中相关信息必须同步更新-->
  39. <!--注意:-->
  40. <!--1. 必须使用DOM0级标准事件(onclick)-->
  41. <script type="text/javascript">
  42. // 补全代码
  43. function OnClickEvent(event, Id, price) {
  44. let SumPrice = document.querySelector('#total')
  45. let ElementType = document.querySelector('#' + Id)
  46. let action = event.target.innerText
  47. // innerHTML: 设置或获取元素内的所有子节点(包括标签、注释和文本节点)
  48. // outerHTML: 设置或获取元素及所有子节点(包括标签、注释和文本节点)
  49. // innerText: 1、获取元素的文本,会过滤掉所以标签,将文档树中的所有文本拼接起来
  50. // 2、设置时会把元素所以子节点都删除再重写
  51. // 3、利用这一点,可以通过 innerText 属性过滤掉 HTML 标签
  52. console.log(ElementType.innerHTML)
  53. console.log(ElementType.innerText)
  54. if (action == "+") {
  55. ElementType.innerText = +ElementType.innerText + 1
  56. SumPrice.innerText = +SumPrice.innerText + price
  57. } else if (ElementType.innerText != '0') {
  58. ElementType.innerText = +ElementType.innerText - 1
  59. SumPrice.innerText = +SumPrice.innerText - price
  60. }
  61. }
  62. </script>
  63. </body>
  64. </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"

📰代码演示:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset=utf-8>
  5. </head>
  6. <objody>
  7. <!--描述-->
  8. <!--请补全JavaScript代码,完成函数的接口功能。要求如下:-->
  9. <!--1. 函数接收两种类型的参数,分别为"get?"和"update?name=xxx&to=yyy","name"、"to"为参数,"xxx"、"yyy"分别为参数对应的值。-->
  10. <!--2. 当参数为"get?"时,返回data数据-->
  11. <!--3. 当参数为"update?name=xxx&to=yyy"时,将data中所有"name"为"xxx"的项,更改为"name"值为"yyy"-->
  12. <script type="text/javascript">
  13. let data = [{
  14. name: 'nowcoder1'
  15. }, {
  16. name: 'nowcoder2'
  17. }]
  18. const _api = string => {
  19. // 补全代码
  20. let array = string.split('?')
  21. if (array[0] === 'get') {
  22. return data
  23. } else {
  24. let obj = {}
  25. // 以&拆分成数组
  26. let spl = array[1].split('&')
  27. spl.forEach(item => {
  28. let [key, value] = item.split('=')
  29. obj[key] = value
  30. })
  31. data.forEach((item, index) => {
  32. if (item.name == obj.name) {
  33. data[index].name = obj.to
  34. }
  35. })
  36. }
  37. }
  38. _api("update?name=xxx&to=yyy")
  39. </script>
  40. </objody>
  41. </html>

最后

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

在这里插入图片描述

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

在这里插入图片描述


本文转载自: https://blog.csdn.net/m0_61490399/article/details/126422511
版权归原作者 SYFStrive 所有, 如有侵权,请联系我们删除。

“刷题日常计~JS④”的评论:

还没有评论