0%

学习笔记 2020 11 26

学习笔记 2020-11-26

JavaScript 高级程序设计(第4版) 阅读记录

表单脚本

文本框编程

HTML5 约束验证 API
  1. 检测有效性
    • checkValidity()
    • validity
      • customError
      • petternMismatch
      • rangeOverflow
      • rangeUnderflow
      • stepMisMatch
      • tooLong
      • typeMismatch
      • valid
      • valueMissing
  2. 禁用验证
    • novalidate

选择框编程

  • HTMLSelectElement

    • add
    • multiple
    • options
    • remove
    • selectedIndex
    • size
  • HTMLOptionElement

    • index
    • label
    • selected
    • text
    • value
选项处理
  • selectedIndex
添加选项
  • add()
移除选项
  • removeChild()
  • remove()
移动和重排选项
表单序列化

富文本编辑

基本的技术就是在空白 HTML 文件中嵌入一个 iframe 。通过 designMode 属性,可以将这个空白文档变成可以编辑的,实际编辑的则是 <body> 元素的 HTML。designMode 属性有两个可能的值:”off”(默认值)和”on”。设置为”on”时,整个文档都会变成可以编辑的(显示插入光标),从而可以像使用文字处理程序一样编辑文本,通过键盘将文本标记为粗体、斜体,等等。

该属性只能在文档完全加载后设置。

使用 contenteditable

给元素添加 contenteditable 属性使得该元素被编辑。

与富文本交互
  • document.execCommand()
  • queryCommandEnabled()
  • queryCommandState()
  • queryCommandValue()

现代 JavaScript 教程

F.prototype

任务

  1. 修改 “prototype”

    在下面的代码中,我们创建了 new Rabbit,然后尝试修改它的 prototype。

    最初,我们有以下代码:

    function Rabbit() {}
    Rabbit.prototype = {
      eats: true
    };
    
    let rabbit = new Rabbit();
    
    alert( rabbit.eats ); // true
    1. 我们增加了一个字符串(强调)。现在 alert 会显示什么?

      function Rabbit() {}
      Rabbit.prototype = {
        eats: true
      };
      
      let rabbit = new Rabbit();
      
      Rabbit.prototype = {};
      
      alert( rabbit.eats ); // ?

      true

    2. ……如果代码是这样的(修改了一行)?

      function Rabbit() {}
      Rabbit.prototype = {
        eats: true
      };
      
      let rabbit = new Rabbit();
      
      Rabbit.prototype.eats = false;
      
      alert( rabbit.eats ); // ?

      false

    3. 像这样呢(修改了一行)?

      function Rabbit() {}
      Rabbit.prototype = {
        eats: true
      };
      
      let rabbit = new Rabbit();
      
      delete rabbit.eats;
      
      alert( rabbit.eats ); // ?

      true

    4. 最后一种变体:

      function Rabbit() {}
      Rabbit.prototype = {
        eats: true
      };
      
      let rabbit = new Rabbit();
      
      delete Rabbit.prototype.eats;
      
      alert( rabbit.eats ); // ?

      undefined

  2. 使用相同的构造函数创建一个对象

    想象一下,我们有一个由构造函数创建的对象 obj —— 我们不知道使用的是哪个构造函数,但是我们想使用它创建一个新对象。

    我们可以这样做吗?

    let obj2 = new obj.constructor();

    请给出一个可以使这样的代码正常工作的 obj 的构造函数的例子。再给出会导致这样的代码无法正确工作的例子。

    // 正常工作
    function Obj {}
    let obj = new Obj();
    // 无法正常工作
    function Obj {}
    Obj.prototype = {}
    let obj = new Obj();