Js
2019-08-21-JS
Js相关知识点
Js代码运行阶段:
- 解析阶段: 检查是否由语法错误及变量、函数的声明
- 运行阶段: 变量的赋值,代码流程的执行
数据类型
Number String Boolen undefined null Objec(function, 数组)
关于this:
- 指的是调用当前方法 / 函数 的那个对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20function fn1 () {
this;
}
fn1(); // this => window
------------------------------------------------------
oDiv.onclick = fn1; // this => oDiv, 事件调用不加 ();
------------------------------------------------------
oDiv.onclick = function () {
fn1(); // fn1() 里的this => window
}
------------------------------------------------------
var obj = {
name: 'Li',
age: 18,
fun: function(){
var s = this.age; // this =>obj
console.log(s);
}
}
obj.fun();
- 1.以
函数的形式调用时, this永远都是window, 比如fun(); 相当于window.fun(); - 2.以
方法的形式调用时, this是调用方法的那个对象 - 3.以
构造函数的形式调用时, this是新创建的那个对象 - 4.以
使用call和apply调用时, this是指定的那个对象
关于函数返回值:
函数名+括号: fn1() ==> return 后面的的值,函数返回值
仅仅 是函数名调用:fn1 ==>函数体对象为参数,即整个函数代码
所有函数默认返回值:未定义
return 之后任何代码都不执行
函数声明:
1
2
3
4
5
6
7
8
9
10
11
12function 函数名(形参1,形参2,...){
code;
return 返回值;
}
var fun = function(){
code;
}
(function(){
code;
})(); 匿名函数(立即执行函数,自调用匿名函数)
关于定时器:
- var timer = setInterval(函数名, 毫秒);
- clearInterval(timer); // 重复执行
- clearTimout(timer); // 执行一次
关于OOP:
- 特点:
- 抽象:抓问题核心
- 封装:不考虑内部实现原理,只考虑功能使用
- 继承:从已有对象,继承出新的对象,多重继承,多态
- 组成:
- 方法:函数(过程、动态的)
- 属性:变量(状态、静态的)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21function People (name) { // 构造
this.name = name; // 属性
this.showName = showName;
}
function showName () { // 方法
alert(this.name);
}
var p1 = new People('Jhon');
p1.showName();
=========================================
function People (name) {
this.name = name;
}
People.prototype.showName = function () {
alert(this.name);
}
var p1 = new People('Jhon');
p1.showName();
=========================================
var obj = {name:'Li', age:12, fly:function(){}};
var obj = new Object();
关于 DOM 对像.属性 操作的各种尺寸宽高:
- offset
offsetWidth[Height]–> 元素(盒子)的 宽高+padding+bordeoffsetLeft[Top]–> 元素(盒子)的父级带有定位属性,左侧(顶部)距离数字,从父亲的 padding 开始算,父亲的 border 不算;若没有定位,则以body为准
- offsetParent
- 带有定位的父级元素节点,若没有定位,返回结果为body;若有返回最近的父级元素
- 本身定位为
fixed- offsetParent:null (非火狐)
- offsetParent:body(火狐)
- 本身定位不为
fixed- 父级没有定位:offsetParent:body
- 父级有定位:offsetParent:定位父级
- scroll
scrollWidth[Height]–> 元素(盒子)的宽高,不包括border+margin,scrollWidth[Height]=width[Height]+paddingscrollHeight有一个特点:如果文字超出了盒子,高度为内容的高(包括超出的内容);不超出,则是盒子本身高度。
scrollTop[Left]–> 网页被卷去的头部与左部的距离,兼容写法:window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop
- client
clientWidth[Height]–> 元素(盒子)的宽高,padding + width[height],调用body / html 为获取网页可视区的宽高clientX[]Y]–> 鼠标距离可视区左侧 / 上侧的距离clientTop[Left]–> 元素(盒子)的上 / 左border
- 总结:
区别:宽高
1
2
3
4
5
6
7
8offsetWidth = width + padding + border // 占位宽
offsetHeight = height + padding + border // 占位高
scrollWidth = 内容宽度(不包含border) // 内容宽
scrollHeight = 内容高度(不包含border) // 内容高
clientWidth = width + padding // 可视区宽
clientHeight = height + padding // 可视区高区别:上左
1
2
3
4
5
6
7
8
9
10
11offsetTop/offsetLeft:
调用者:任意元素。(盒子为主)
作用:距离父系盒子中带有定位的距离。
scrollTop/scrollLeft:
调用者:document.body.scrollTop(window调用)(盒子也可以调用,但必须有滚动条)
作用:浏览器无法显示的部分(被卷去的部分)。
clientY/clientX:
调用者:event // 重要
作用:鼠标距离浏览器可视区域的距离(左、上)![[BOM]](/posts/824395f6/BOM.png)
获取元素的样式:
currentStyle –>该属性获取当前元素的样式,只有IE支持
- box1.currentStyle.width
getComputerStyle() –>该方法获取当前元素样式,
- getComputerStyle((box1, null).width);
{}–>表示对象;[]–>表示对象的属性、方法;()–>如果用在方法名后面1
2
3
4function getStyle(obj, attr) {
return obj.currentStyle?obj.currentStyle[attr]:obj.getComputerStyle[attr];
}
showMsg.innerHTML = "x = "+x + ", y = "+y; // x, 均为变量
关于闭包:
- 嵌套的内部函数引用了嵌套的外部函数的变量,就产生了闭包
- 闭包 存在于嵌套的内部函数中
1
2
3
4
5
6
7
8function fn1(){
var a = 2;
var b = 'abc';
function fn2(){ // 执行函数定义产生闭包(不用调用内部函数)
console.log(a);
}
}
fn1(); //
关于ES6
变量的解构赋值, 给多个形参赋值
1 | |
模版字符串
必须用 `` 包含
变化的部分使用 {xxx} 定义
1 | |
对象的简写方式
1 | |
箭头函数
不是调用的时候决定的, 而是在定义的时候处在的对像就是 它的this, 常规函数则相反
箭头函数的this确定: 外层有函数, 则外层函数的this就是内部箭头函数的this, 若没有, 则this是window
参数 => 语句/表达式
1 | |
三点运算符 && 数组扩展方法
1 | |
Promise 对象
1 | |
Js
https://anyu967.github.io/posts/824395f6.html