博客列表 >构造函数、dom元素的基础

构造函数、dom元素的基础

手机用户1576673622
手机用户1576673622原创
2021年03月15日 18:41:56523浏览

流程控制:循环

while:入口判断与出口判断的唯一区别,出口判断条件不满足的时候,至少执行一次循环体。
for of:将所有集合类型的数据的遍历进行了统一,是遍历的终结者

  1. const colors = ["red", "green", "blue"];
  2. // 1,while :入口判断
  3. //
  4. let i = 0;
  5. while (i < colors.length) {
  6. console.log("%c%s", "color:red", colors[i]);
  7. i++;
  8. }
  9. console.log("%c--------------", 'color:blue');
  10. // 2.while:出口判断
  11. i = 0;
  12. do {
  13. // 条件不满足的时候,至少执行一次循环体
  14. console.log(colors[i]);
  15. i++;
  16. } while (i > colors.length);
  17. console.log("%c--------------", 'color:green');
  18. // 3.for (初始变量,循环条件,条件更新)
  19. for (let i = 0; i < colors.length; i++) {
  20. console.log(colors[i]);
  21. }
  22. console.log("%c--------------", 'color:green');
  23. // 对象使用for in
  24. const lesson = { name: "js", score: 90 };
  25. for (let key in lesson){
  26. console.log("%s",lesson[key]);
  27. }
  28. console.log("%c--------------", 'color:green');
  29. // for in 也可以便利数组
  30. for (let key in colors){
  31. console.log("%s",colors[key]);
  32. }
  33. console.log("%c--------------", 'color:green');
  34. // for of 将所有集合类型的数据的遍历进行了统一,是遍历的终结者
  35. // 可以遍历数组
  36. for (let item of colors){
  37. console.log(item);
  38. }
  39. console.log("%c--------------", 'color:green');
  40. // 可以遍历对象
  41. for (let item of lesson){
  42. console.log(item);
  43. }
  44. // 报错 : lesson不是一个可以迭代的对象。

构造函数的原型与对象原型之间的区别与联系

实例的原型永远指向它的构造函数的原型,实例的原型从构造函数的原型继承成员(属性/方法)
需要被继承的所有类实例共享的成员,应该写在构造函数原型上。
通常属性不应该被共享,他们是区分不同对象的标志,方法更适合共享。

  • 任何函数都有一个原型属性:prototype。
  • prototype对于普通函数没用,对构造函数来说才有用
  • 构造函数是”对象工厂”,是用来创建对象的
  • 对象也叫”实例”, 实例: 实际案例
  • js中没有“类”的概念,它是基于原型的语言,所以可简单的将构造函数当成“类”
  • 构造函数必须使用“new”来调用,普通函数不用
  • new 的过程就是类的实例化过程,就是创建一个对象的过程
  • 创建对象的过程,就叫“类的实例化”

    1. // 声明构造函数(行业规范:首字母大写,用来区分。)
    2. function User(name, email) {
    3. // 1. 创建出一个新对象,用this来表示(这是伪代码,系统自动创建并执行,不用写)
    4. // const this = new User;
    5. // 2.初始化对象,给这个对象添加一个自定义属性,用来和其它实例进行区分
    6. // 可以为空
    7. this.name = name;
    8. this.email = email;
    9. // 3. 返回这个对象
    10. // return this;
    11. }
    12. // 使用 new 调用
    13. const user = new User("admin", "admin@php.cn");
    14. console.log(user instanceof User);
    15. console.log(user);
    16. // 在原型属性中增加一个属性
    17. user.__proto__.salary = 8899;
    18. // 先在自由属性中找,找不到再到原型属性上找。
    19. console.log(user.salary);
    20. const user1 = new User("peter", "peter@php.cn");
    21. console.log(user1);
    22. // console.log(user1.salary);
    23. console.dir(User);
    24. // 实例的原型永远指向它的构造函数的原型,实例的原型从构造函数的原型继承成员(属性/方法)
    25. console.log(user1.__proto__ === User.prototype);
    26. // 需要被所有类实例共享的成员,应该写到构造函数的原型上
    27. User.prototype.nation = "CHINA";
    28. console.log(user.nation, user1.nation);
    29. // 属性通常不应该共享的,它是区分不同对象的标志,方法更适合共享
    30. User.prototype.show = function () {
    31. return { name: this.name, email: this.email, salary: this.salary };
    32. };
    33. console.log(user.show());
    34. console.log(user1.show());

    获取dom元素的常用方法

    1. <ul id="list">
    2. <li class="item">item1</li>
    3. <li class="item">item2</li>
    4. <li class="item">item3</li>
    5. <li class="item">item4</li>
    6. <li class="item">item5</li>
    7. </ul>
    8. <form action="">
    9. <input type="text" />
    10. </form>
    11. <script>
    12. // 使用css是最直观的
    13. // 1,获取满足条件的所以元素
    14. const lis = document.querySelectorAll("#list li")
    15. console.log(lis);
    16. console.log('---------------');
    17. // 2.获取满足条件的第一个元素
    18. first = document.querySelector("#list li")
    19. console.log(first);
    20. // 其他
    21. // 返回对拥有指定 ID 的第一个对象的引用
    22. id = document.getElementById('list')
    23. console.log(id);
    24. // 返回带有指定标签名的对象的集合
    25. tagname = document.getElementsByTagName('li')
    26. console.log(tagname);
    27. // 返回带有指定名称的对象的集合
    28. name = document.getElementsByName('')
    29. // 获取所有指定类名的元素
    30. classname = document.getElementsByClassName('item')
    31. console.log(classname);
    32. // 有几个快捷方式,用来快速 获取某一个或某一类元素
    33. // html
    34. // console.log(document.documentElement);
    35. // head
    36. console.log(document.head);
    37. // body
    38. console.log(document.body);
    39. // title
    40. console.log(document.title);
    41. // forms
    42. console.log(document.forms[0]);
    43. console.log(document.forms.item(0));
    44. console.log(document.images);
    45. </script>

    dom 元素的增删改查常用操作

  • 创建元素

    • createElement();
    • parent appendChild(newEl),添加到页面
    • 将html逐个添加 字符串直接解析dom元素 insertAdjacentHTML(beforeEnd(到最后))
      insertAdjacentHTML(afterBegin(到前面))
    • 如果大量添加元素应该使用文档片段完成
  • 更新

    • replaceWith()
    • replaceChild();
  • 移除

    • removeChild()
  1. <ul id="list">
  2. <li class="item">item1</li>
  3. <li class="item">item2</li>
  4. <li class="item">item3</li>
  5. <li class="item">item4</li>
  6. <li class="item">item5</li>
  7. </ul>
  8. <script>
  9. const ul = document.querySelector('#list')
  10. // 1.创建元素
  11. const li = document.createElement('li');
  12. // parent.appendChild(newEl),添加到页面(在父元素中调用)
  13. ul.appendChild(li);
  14. li.innerText = 'item6';
  15. // innerHTML支持代码
  16. // li.innerHTML = '<i style="color:red">item6</i>';
  17. let htmlStr = "<li style='color:red'>item7</li>";
  18. // 将html字符串直接解析为dom元素
  19. ul.insertAdjacentHTML("beforeEnd", htmlStr);
  20. // 如果大量添加元素应该使用文档片断完成
  21. // const frag = document.createDocumentFragment(); 以下是简化成构造函数
  22. const frag = new DocumentFragment();
  23. for (let i = 0; i < 5; i++) {
  24. const li = document.createElement("li");
  25. li.textContent = "Hello " + (i + 1);
  26. // 将生成的节点先临时挂载到文档片断中
  27. frag.appendChild(li);
  28. }
  29. ul.appendChild(frag);
  30. htmlStr = `
  31. <li style="color:violet">demo1</li>
  32. <li style="color:violet">demo2</li>
  33. <li style="color:violet">demo3</li>
  34. <li style="color:violet">demo4</li>
  35. <li style="color:violet">demo5</li>
  36. `;
  37. ul.insertAdjacentHTML("afterBegin", htmlStr);
  38. // 用元素不用字符串
  39. ul.insertAdjacentElement("afterBegin", li);
  40. ul.insertAdjacentHTML("afterBegin", "<li>item888</li>");
  41. // 2. 更新
  42. let h3 = document.createElement("h3");
  43. h3.innerHTML = "晚上好";
  44. document.querySelector("li:nth-of-type(3)").replaceWith(h3);
  45. ul.replaceChild(h3, document.querySelector("li:last-of-type"));
  46. // 3.移除
  47. ul.removeChild(document.querySelector("#list h3"));
  48. // 4. 遍历查询
  49. // 获取所有子元素
  50. console.log(ul.children);
  51. // 获取子元素数量
  52. console.log(ul.children.length);
  53. console.log(ul.childElementCount);
  54. // 第一个子元素
  55. console.log(ul.firstElementChild);
  56. // 最后一个
  57. console.log(ul.lastElementChild);
  58. // 父节点
  59. console.log(ul.lastElementChild.parentElement);
  60. // 前一个兄弟
  61. const jiu = document.querySelector("#list li:nth-of-type(9)");
  62. jiu.style.background = "yellow";
  63. console.log(jiu.previousElementSibling.innerHTML);
  64. // 后一个兄弟
  65. console.log(jiu.nextElementSibling.innerHTML);
  66. </script>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议