学习笔记 2020-11-26
JavaScript 高级程序设计(第4版) 阅读记录
表单脚本
文本框编程
HTML5 约束验证 API
- 检测有效性
- checkValidity()
 - validity
- customError
 - petternMismatch
 - rangeOverflow
 - rangeUnderflow
 - stepMisMatch
 - tooLong
 - typeMismatch
 - valid
 - valueMissing
 
 
 - 禁用验证
- 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
任务
修改 “prototype”
在下面的代码中,我们创建了
new Rabbit,然后尝试修改它的 prototype。最初,我们有以下代码:
function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); alert( rabbit.eats ); // true我们增加了一个字符串(强调)。现在
alert会显示什么?function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); Rabbit.prototype = {}; alert( rabbit.eats ); // ?true……如果代码是这样的(修改了一行)?
function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); Rabbit.prototype.eats = false; alert( rabbit.eats ); // ?false像这样呢(修改了一行)?
function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); delete rabbit.eats; alert( rabbit.eats ); // ?true最后一种变体:
function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); delete Rabbit.prototype.eats; alert( rabbit.eats ); // ?undefined
使用相同的构造函数创建一个对象
想象一下,我们有一个由构造函数创建的对象
obj—— 我们不知道使用的是哪个构造函数,但是我们想使用它创建一个新对象。我们可以这样做吗?
let obj2 = new obj.constructor();请给出一个可以使这样的代码正常工作的
obj的构造函数的例子。再给出会导致这样的代码无法正确工作的例子。// 正常工作 function Obj {} let obj = new Obj(); // 无法正常工作 function Obj {} Obj.prototype = {} let obj = new Obj();