js(7)知识小总结

js知识总结(沙箱模式、forEach、map、严格模式)

沙箱模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//IIFE 立即执行函数表达式
(function(window){
//变量的声明
//功能的实现
//如果需要的话,就通过window对象向外界暴露接口
})(window)
//只要在沙箱中用到的外部的内容,就要将该内容已传参的方式传到沙箱内部
//框架
//组件
//插件

forEach

1
2
3
4
5
6
7
数组.forEach(function(value, index, arr){
})
//value 当前正在遍历的元素
//index 当前正在遍历的元素的所以
//arr 当前正在遍历的数组

map

1
2
3
4
5
6
7
8
9
数组.map(function(value, index, arr){
})
//value 当前正在遍历的元素
//index 当前正在遍历的元素的所以
//arr 当前正在遍历的数组
//map方法的返回值,将每次调用回调函数的返回值组合成一个新的数组,作为这个map的返回值

函数的四种调用模式

函数调用模式

1
2
函数名();
//this ----> window

方法调用模式

1
2
3
对象名.方法名();
对象名[方法名]();
//this ----> 谁调用的这个方法就是谁

构造函数调用模式

1
2
new 函数名();
//this ----> new创建出来的对象

上下文调用模式

对象创建模式

工厂模式

1
2
3
4
5
6
7
8
9
10
function createPerson(name, age, gender){
var obj = {};
obj.name = name;
obj.age = age;
obj.gender = gender;
return obj;
}
//工厂模式中的this是window,因为调用模式是函数调用模式
var p = createPerson("", 19, "male");

寄生模式

1
2
3
4
5
6
7
8
9
10
function createPerson(name, age, gender){
var obj = {};
obj.name = name;
obj.age = age;
obj.gender = gender;
return obj;
}
//寄生模式中的this指向的是new创建出来的对象!
var p = new createPerson("", 18, "male");

上下文调用模式

call

1
2
3
4
函数名.call(要让this指向的对象, arg1, arg2...argN);
//1. 调用函数
//2. 让函数中的this指向,第一个参数中的对象
//3. 把第二个及以后所有的参数依次传递给函数作为实参!

apply

1
2
3
4
函数名.apply(要让this指向的对象, 数组或者伪数组);
//1. 调用函数
//2. 让函数中的this指向,第一个参数中的对象
//3. 把第二个参数中的数组或者伪数组拆解开,依次传递给函数作为形参(很常用的特性)

使用注意事项

  1. 当call和apply的第一个参数传入的是一个值类型的数据的时候,这个时候函数中的this会指向值类型对应的引用类型的数据
  2. 当call和apply的第一个参数传入的是undefined或者null或者不传的时候,函数中的this指向window对象

借用构造函数继承

1
2
3
4
5
6
7
8
9
10
11
12
function Person(){
this.name = "";
this.age = "";
this.gender = "";
}
function Student(){
Person.call(this);
}
//创建好的t对象就拥有了name age 和gender
var t = new Student();

严格模式

语法要求更加严格的模式

1
2
3
//开启严格模式
"use strict"
'use strict'

严格模式下的要求

  1. 使用变量必须使用var
  2. 函数的形参不能重名
  3. 对象的属性不能重名(ES6之后不存在这个问题)
  4. 八进制的数字不能使用
  5. eval有自己的作用域
  6. 不能删除无法删除的属性Object.prototype
  7. 不能给只读属性赋值 Object.prototype
-------------本文结束感谢您的阅读-------------