学习计划
API
API分为浏览器API和第三方API 其中,浏览器API内建于web浏览器中。
浏览器API
文档对象模型api
文档对象模型 (DOM) 将 web 页面与到脚本或编程语言连接起来。通常是指 JavaScript,但将 HTML、SVG 或 XML 文档建模为对象并不是 JavaScript 语言的一部分。DOM 模型用一个逻辑树来表示一个文档,树的每个分支的终点都是一个节点 (node),每个节点都包含着对象 (objects)。DOM 的方法 (methods) 让你可以用特定方式操作这个树,用这些方法你可以改变文档的结构、样式或者内容。节点可以关联上事件处理器,一旦某一事件被触发了,那些事件处理器就会被执行。
Canvas 画布
它可以用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面。 Canvas API提供了一个通过js和html的元素绘制图形的方法。 其中 Canvas api主要聚焦在2d图形
注意
CSS中单位长度的区别
em是相对于自身字体大小的单位 在css中单位长度用的最多的是px、em、rem,这三个的区别是:
px是固定的像素,一旦设置了就无法因为适应页面大小而改变。
em和rem相对于px更具有灵活性,他们是相对长度单位,意思是长度不是定死了的,更适用于响应式布局。
对于em和rem的区别一句话概括:em相对于父元素,rem相对于根元素。 相对于父元素的意思是说,如果要是父元素的多少倍可以使用
js中隐式转换
在JavaScript中做加法运算,当遇到字符串值时,之后(包含当前字符串)的所有值都自动转换为字符串类型然后相加,结果为数值的链式拼接。
对象原型
JavaScript 中所有的对象都有一个内置属性,称为它的 prototype(原型)。它本身是一个对象,故原型对象也会有它自己的原型,逐渐构成了原型链。原型链终止于拥有 null 作为其原型的对象上。
指向对象原型的属性并不是 prototype。它的名字不是标准的,但实际上所有浏览器都使用 __proto__。访问对象原型的标准方法是 Object.getPrototypeOf()。
也就是说,当访问一个对象的属性的时候,如果在对象本身中找不到该属性,那么就会在原型中搜索该属性。如果还是找不到该属性就去搜索原型的原型,以此类推,直到找到该属性或者是到达链的末端,这时就会返回undefiined。
对象的原型并不都是Object.prototype
设置原型
一般使用两种方法 分别是 object.create()和构造函数的方法。
- 使用object.create()创建对象还可以指定一个被用作新对象原型的对象。
const personPrototype = {
greet() {
console.log("hello!");
},
};
const carl = Object.create(personPrototype);
carl.greet(); // hello!
我们创建了一个 personPrototype 对象,它有一个 greet() 方法。然后我们使用 Object.create() 来创建一个以 personPrototype 为原型的新对象
- 构造函数的方法 所有的函数都有一个名为prototype的属性,当调用一个函数作为构造函数,这个属性被设置为新构造函数的原型。 所以当设置一个构造函数的prototype时,可以确保所有用该构造函数创建的对象都被赋予该原型。
面向对象编程基本概念
面向对象编程--oop
基本概念:类与实例、继承、封装。
面向对象编程将一个系统抽象为许多对象的集合,每一个对象代表了系统的特定方面,对象包括了函数和数据,一个对象可以向其他部分的代码提供一个公共接口,而其他部分的代码可以通过公共接口执行该对象的特定操作,系统的其他部分不关注对象内部的实现。
- 属性:property
- 行为(方法):method 使用面向对象的编程对问题进行建模的时候,会创建一系列抽象的定义,这些定义其实就代表了系统中存在的各类的对象。对类的实例化其实就是相当于创建了一个具体的对象。由类创建实例的过程是由一个特别的函数——构造函数所完成的
当一个方法拥有相同的函数名,但是在不同的类中可以具有不同的实现时,我们称这一特性为多态(polymorphism)。当一个方法在子类中替换了父类中的实现时,我们称之为子类重写/重载(override)了父类中的实现。
保持对象内部状态的私有性,明确划分对象的公共接口和内部状态,这些特性称为封装。其他部分的代码想要执行对象的某些操作的时候,需要借助对象向外部提供的接口完成操作,对象保持自身的内部状态不会被外部的代码随意的修改。
我们可以使用 private 关键字标记对象的私有部分,也就是外部代码无法直接访问的部分。如果一个属性在被标记为 private 的情况下,外部代码依旧尝试访问该属性,那么通常来说,计算机会抛出一个错误。
一般以下划线开头的变量名看作是对象的私有部分。
正则表达式
需要匹配一个不确定的字符串时,比如寻找一个或多个 "b",或者寻找空格,可以在模式中使用特殊字符。比如,你可以使用 /ab*c/ 去匹配一个单独的 "a" 后面跟了零个或者多个 "b",同时后面跟着 "c" 的字符串:*的意思是前一项出现零次或者多次。
new操作符的实现过程
- 创建一个对象
- 将构造函数的作用域赋值给新对象,也就是将对象的__proto__属性指向构造函数prototype属性
- 指向构造函数中的代码,将构造函数中的this指向该对象,也就是说为这个新的对象添加属性和方法。
- 返回新的对象
箭头函数和普通函数的区别
箭头函数更简洁,没有参数就一个空括号,一个参数就省去括号,多个参数用逗号分隔,返回值只有一个的话可以省略大括号,