JacaScript解刨
JavaScript - 高级
this
==call==
call()方法调用一个对象。可立即调用函数与改变this指向;
1 |
==apply==
apply()方法调用一个函数,可以立即调用函数与改变this指向;
1 |
==bind==
bind()方法不会调用函数,但可以改变函数内部this指向,返回的是原函数改变this之后产生的新函数。
共同点:都可以改变this指向;
不同点:call 和 apply 会调用函数,并且改变函数内部this指向;
call传递参数使用逗号,apply使用数组传递;
bind 不会调用函数,可以改变函数内部this指向;
1 |
—— 应用场景
- call 经常做继承;
- apply 经常跟数组有关系;比如借助于数学实现数组最大值与最大值
- bind 不调用函数,可以改变this指向;比如改变定时器内部的this指向
严格模式
1 · 为脚本开启严格模式
1 | 1,(function(){ |
高阶函数
map() : 接收一个函数参数的数组对象,遍历这个数组;
reduce() : 接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值;
filter() : 接收一个函数参数的数组对象,返回满足条件的数组对象;
forEach() : 调用数组中的每个元素,并将元素传递給回调函数;
some() : 判断是否含有符合条件的元素,返回布尔值;
every() : 判断是否全部元素符合条件,返回布尔值;
对象原型链
每个函数都有prototype原型属性;这是一个对象所有函数的属性和方法都被构造函数所拥有
==好处:==可以把不变的方法直接定义在prototype对象上,直下的所有对象实例都可以 (共享)这些方法。
1 | Star.prototype.sing = function(){ |
对象都会有一个属性__ prpto __ 指向构造函数的prototype原型对象; __ porto__ 对象原型和原型对象prototype是等价的;
1 | Star.__proto__sing = function(){} |
对象原型(__ proto __)和构造函数(prototype)原型对象里面都有一个属性constructor属性的构造函数,它指回构造函数本身;
它可以让原型对象重新指向原来的构造函数。
1 | //如果修改了原来的原型对象,给原型对象赋值的是一个对象,则必须手动利用constructor指回原 来的构造函数 |
闭包
- 闭包(closure)指有权访问另一个函数作用域中变量的函数;
- 一个作用域可以访问另一个函数的局部变量
- 我们fn 外面得作用域可以访问fn 内部的局部变量
- 闭包的主要作用:延伸了变量的作用范围