笔记:js 加固进阶

113 阅读9分钟

构造函数作用:用来初始化对象,首字母必须大写,需要和new 在一起使用才有意义。

构造函数的方式: 1.利用实例化 new Object() 创建 2.利用 对象字面量创建对象 obj = {} 3.利用构造函数创建对象 function Star(){}

构造函数: 1.实例成员是通过this添加的成员(实例成员不可以通过构造函数来访问实例成员) 2.静态成员 在构造函数本身上添加的成员。(Function.sex='xxx'),只能通过构造函数访问,不能通过对象访问。

每一个构造函数 都有一个 prototype属性。也就是原型对象 每一个对象都有一个属性__proto__

原型链:

***实例化对象.proto === 构造函数.prototype

***构造函数.prototype.proto === Object.prototype ***Object.prototype.constructor === Object的构造函数

***Object.prototype.proto === null;

***constructor: 指回原来的构造函数,并且可以传递参数。 *** super:调用父类的构造函数,也可以调用父类的普通函数。 this: 1.构造函数中,里面this指向的是对象实例(构造函数) 2.原型对象函数里面的this指向的是 实例对象(构造函数)

array 内置对象方法有哪些: Array.prototype: concat: ƒ concat() constructor: ƒ Array() copyWithin: ƒ copyWithin() entries: ƒ entries() every: ƒ every() fill: ƒ fill() filter: ƒ filter() // 过滤 find: ƒ find() findIndex: ƒ findIndex() flat: ƒ flat() flatMap: ƒ flatMap() flatten: ƒ flatten() forEach: ƒ forEach() includes: ƒ includes() indexOf: ƒ indexOf() join: ƒ join() keys: ƒ keys() lastIndexOf: ƒ lastIndexOf() length: 0 map: ƒ map() pop: ƒ pop() push: ƒ push() reduce: ƒ reduce() reduceRight: ƒ reduceRight() reverse: ƒ reverse() shift: ƒ shift() slice: ƒ slice() some: ƒ some() // 返回布尔值,找到则true,否则false sort: ƒ sort() splice: ƒ splice() toLocaleString: ƒ toLocaleString() toString: ƒ toString() unshift: ƒ unshift() values: ƒ values() Symbol(Symbol.iterator): ƒ values() Symbol(Symbol.unscopables):

继承: 1.借用构造函数+原型对象继承属性:组合继承子构造函数继承父构造实例化对象,Son.prototype= new Father() 如果利用对象的形式 Son.prototype.constructor = Son; 修改了原型对象,别忘了利用constructor指回原来的构造函数。 2.ES6的class :class Son extends Father{constructor(x,y){super()}} 3.call方法, fn.call(this,1,2,3),可以调用函数,改变this 4.apply方法 fn.apply(this,[1,2,3,4]) 可以调用函数,改变this

继承中,如果实例化子类输出一个方法,子类中没有就找父类的方法,function,也就是就近原则。

类: 构造函数+原型链 类的本质其实就是一个函数,类就是 构造函数的另外一种写法。 es6的class类就语法糖:一种便捷的写法(原型构造函数) Star.prototype.constructor = class Star{}

面向对象特性: 1、抽取(抽象)对象共用的属性和行为组织(封装)成一个类(模板) 2、对类进行实例化 获取类的对象。

some 中设置 return true; 效率会更高。 trim() // 去掉空格

函数的定义和调用:

1.函数声明方式 function fn(){} fn() fn.call() fn.apply() this指向window 2.对象函数 var o = {sayHi:function(){}}; this指向对象o; 3.构造函数 利用 var f = new Function('参数1','参数2',...)
this 指向f的实例化对象,原型对象里面的this也是指向f这个实例化对象 4.绑定事件函数 btn.onclick = function(){}
this 指向它的调用者。 5.定时器函数 setInterval(function(){},1000) this指向的是window 6.立即执行函数 (function(){})()
this指向的是window 7.函数表达式(匿名函数) var f = function(){} this指向的是匿名函数本身。 也就是说 函数都属于对象,所有函数都是 Function的实例对象。。万物皆对象

改变this指向 1.call() // 调用函数 参数列表 并改变this 主要作用实现继承 Math.max.call(null,2,3,5,6,7,9,3) 2.bind() // 改变this 继承 Math.max.bind(null,2,3,5,6,7,9,3) 不能自己调用,只改变this 3.apply() // 调用函数 参数数组 并改变this 继承 可以求数字的最大值和最小值 Math.max.applay(null,[2,3,45,2])

严格模式: ES5新增了严格模式 strict mode; 消除不严谨,不合理,不安全的语法。 ’use strict‘; 严格模式下注意:1.变量必须先声明;2.不能随便delete方法删除变量

3.严格模式下 this 指向 undefined 4.严格模式构造函数不加new 调用 会报错。 5.严格模式定时器中 this指向 undefined 6.严格模式下参数不能相同 7.严格模式下不能在非函数的代码块中声明函数。

高阶函数: 函数可以作为参数传递 function fn(a,b,callback) {callback&&callback()} fn(1,2,function(){})

闭包:一个作用域能够访问另外一个函数内部的局部变量。 ****闭包是典型的高阶函数

闭包作用:1.延伸变量的作用范围 闭包(closure)

(function(传递i){console.log(i)})(接收i);

递归: 是指函数调用自身 斐波拉切数列: function fn(n) { if(n==1|| n==2) return 1; return fn(n-1)+fn(n-2)

}
fn(3)

浅拷贝: 只拷贝一层,只拷贝引用值 1. for in for(var k in obj) // k 是属性名 obj[k]属性值 2.ES6中通过Object.assgin(a1,a2) // assgin浅拷贝 3.ES6 的对象扩展 解构赋值 let newObj = {...obj}; 4.自定义函数

深拷贝:拷贝每一级别的数据,深度拷贝 deepcopy

 1.递归  (判断是否是数组,是否是对象,是否是简单数据类型)
       item instanceof Array
       item instanceof Object
       newobj[k] = item;

 2JSON.parse(json.stringify(obj))  (弊端:无法处理function啦还有RegExp正则)
 3。  jquery 和 zepto 里的 $.extend 方法可以用作深拷贝
 4.   lodash

正则表达式: 1.利用对象 new RegExp(/123/) 2. 利用字面量 /123/.test(2) /abc/ //只要包含abc这几个字符连在一起都返回true rg.test('aabcd') //true
/^abc///要求必须同时包含abc才返回true/[abc]///只要包含a或者b或者ctrue/[azAZ09]/ //要求必须同时包含abc 才返回true /[abc]/ //只要包含a或者b或者c true /^[a-zA-Z0-9_-]/ // 只能输入英文字母数字,下划线,段横线,且只能一次

  • x相当于>=1 次 可以出现1次或者很多次 ? x相当于 1||0 0次或者1次 {3 } 就是重复3次 {3, } 大于等于3 {3,16} 大于等于3 并且 小于等于16 /^[a-zA-Z0-9_-]{3,16}/大括号量词符表示重复几次/abc3/ 大括号 量词符 表示重复几次 /^abc{3}/ 小括号 量词符 表示优先级 /^(abc){3}$/

/匹配值/值 /XX/g; /xx/i i 执行对大小写不敏感的匹配。忽略大小写 g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 m 执行多行匹配。 ^ 表示开头, $ 表示结束

预定义类:

  1. \d 匹配0-9的任意数字
  2. \D 除了0-9以外都可以

座机号码 /^\d{3}-\d{8}|\d{4}-\d{7}$/ | 或者不能有空格OOP 面向对象
POP 面向过程

构造函数作用:用来初始化对象,首字母必须大写,需要和new 在一起使用才有意义。

构造函数的方式: 1.利用实例化 new Object() 创建 2.利用 对象字面量创建对象 obj = {} 3.利用构造函数创建对象 function Star(){}

构造函数: 1.实例成员是通过this添加的成员(实例成员不可以通过构造函数来访问实例成员) 2.静态成员 在构造函数本身上添加的成员。(Function.sex='xxx'),只能通过构造函数访问,不能通过对象访问。

每一个构造函数 都有一个 prototype属性。也就是原型对象 每一个对象都有一个属性__proto__

原型链:

***实例化对象.proto === 构造函数.prototype

***构造函数.prototype.proto === Object.prototype ***Object.prototype.constructor === Object的构造函数

***Object.prototype.proto === null;

***constructor: 指回原来的构造函数,并且可以传递参数。 *** super:调用父类的构造函数,也可以调用父类的普通函数。 this: 1.构造函数中,里面this指向的是对象实例(构造函数) 2.原型对象函数里面的this指向的是 实例对象(构造函数)

array 内置对象方法有哪些: Array.prototype: concat: ƒ concat() constructor: ƒ Array() copyWithin: ƒ copyWithin() entries: ƒ entries() every: ƒ every() fill: ƒ fill() filter: ƒ filter() // 过滤 find: ƒ find() findIndex: ƒ findIndex() flat: ƒ flat() flatMap: ƒ flatMap() flatten: ƒ flatten() forEach: ƒ forEach() includes: ƒ includes() indexOf: ƒ indexOf() join: ƒ join() keys: ƒ keys() lastIndexOf: ƒ lastIndexOf() length: 0 map: ƒ map() pop: ƒ pop() push: ƒ push() reduce: ƒ reduce() reduceRight: ƒ reduceRight() reverse: ƒ reverse() shift: ƒ shift() slice: ƒ slice() some: ƒ some() // 返回布尔值,找到则true,否则false sort: ƒ sort() splice: ƒ splice() toLocaleString: ƒ toLocaleString() toString: ƒ toString() unshift: ƒ unshift() values: ƒ values() Symbol(Symbol.iterator): ƒ values() Symbol(Symbol.unscopables):

继承: 1.借用构造函数+原型对象继承属性:组合继承子构造函数继承父构造实例化对象,Son.prototype= new Father() 如果利用对象的形式 Son.prototype.constructor = Son; 修改了原型对象,别忘了利用constructor指回原来的构造函数。 2.ES6的class :class Son extends Father{constructor(x,y){super()}} 3.call方法, fn.call(this,1,2,3),可以调用函数,改变this 4.apply方法 fn.apply(this,[1,2,3,4]) 可以调用函数,改变this

继承中,如果实例化子类输出一个方法,子类中没有就找父类的方法,function,也就是就近原则。

类: 构造函数+原型链 类的本质其实就是一个函数,类就是 构造函数的另外一种写法。 es6的class类就语法糖:一种便捷的写法(原型构造函数) Star.prototype.constructor = class Star{}

面向对象特性: 1、抽取(抽象)对象共用的属性和行为组织(封装)成一个类(模板) 2、对类进行实例化 获取类的对象。

some 中设置 return true; 效率会更高。 trim() // 去掉空格

函数的定义和调用:

1.函数声明方式 function fn(){} fn() fn.call() fn.apply() this指向window 2.对象函数 var o = {sayHi:function(){}}; this指向对象o; 3.构造函数 利用 var f = new Function('参数1','参数2',...)
this 指向f的实例化对象,原型对象里面的this也是指向f这个实例化对象 4.绑定事件函数 btn.onclick = function(){}
this 指向它的调用者。 5.定时器函数 setInterval(function(){},1000) this指向的是window 6.立即执行函数 (function(){})()
this指向的是window 7.函数表达式(匿名函数) var f = function(){} this指向的是匿名函数本身。 也就是说 函数都属于对象,所有函数都是 Function的实例对象。。万物皆对象

改变this指向 1.call() // 调用函数 参数列表 并改变this 主要作用实现继承 Math.max.call(null,2,3,5,6,7,9,3) 2.bind() // 改变this 继承 Math.max.bind(null,2,3,5,6,7,9,3) 不能自己调用,只改变this 3.apply() // 调用函数 参数数组 并改变this 继承 可以求数字的最大值和最小值 Math.max.applay(null,[2,3,45,2])

严格模式: ES5新增了严格模式 strict mode; 消除不严谨,不合理,不安全的语法。 ’use strict‘; 严格模式下注意:1.变量必须先声明;2.不能随便delete方法删除变量

3.严格模式下 this 指向 undefined 4.严格模式构造函数不加new 调用 会报错。 5.严格模式定时器中 this指向 undefined 6.严格模式下参数不能相同 7.严格模式下不能在非函数的代码块中声明函数。

高阶函数: 函数可以作为参数传递 function fn(a,b,callback) {callback&&callback()} fn(1,2,function(){})

闭包:一个作用域能够访问另外一个函数内部的局部变量。 ****闭包是典型的高阶函数

闭包作用:1.延伸变量的作用范围 闭包(closure)

(function(传递i){console.log(i)})(接收i);

递归: 是指函数调用自身 斐波拉切数列: function fn(n) { if(n==1|| n==2) return 1; return fn(n-1)+fn(n-2)

}
fn(3)

浅拷贝: 只拷贝一层,只拷贝引用值 1. for in for(var k in obj) // k 是属性名 obj[k]属性值 2.ES6中通过Object.assgin(a1,a2) // assgin浅拷贝 3.ES6 的对象扩展 解构赋值 let newObj = {...obj}; 4.自定义函数

深拷贝:拷贝每一级别的数据,深度拷贝 deepcopy

 1.递归  (判断是否是数组,是否是对象,是否是简单数据类型)
       item instanceof Array
       item instanceof Object
       newobj[k] = item;

 2JSON.parse(json.stringify(obj))  (弊端:无法处理function啦还有RegExp正则)
 3。  jquery 和 zepto 里的 $.extend 方法可以用作深拷贝
 4.   lodash

正则表达式: 1.利用对象 new RegExp(/123/) 2. 利用字面量 /123/.test(2) /abc/ //只要包含abc这几个字符连在一起都返回true rg.test('aabcd') //true
/^abc///要求必须同时包含abc才返回true/[abc]///只要包含a或者b或者ctrue/[azAZ09]/ //要求必须同时包含abc 才返回true /[abc]/ //只要包含a或者b或者c true /^[a-zA-Z0-9_-]/ // 只能输入英文字母数字,下划线,段横线,且只能一次

  • x相当于>=1 次 可以出现1次或者很多次 ? x相当于 1||0 0次或者1次 {3 } 就是重复3次 {3, } 大于等于3 {3,16} 大于等于3 并且 小于等于16 /^[a-zA-Z0-9_-]{3,16}/大括号量词符表示重复几次/abc3/ 大括号 量词符 表示重复几次 /^abc{3}/ 小括号 量词符 表示优先级 /^(abc){3}$/

/匹配值/值 /XX/g; /xx/i i 执行对大小写不敏感的匹配。忽略大小写 g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 m 执行多行匹配。 ^ 表示开头, $ 表示结束

预定义类:

  1. \d 匹配0-9的任意数字
  2. \D 除了0-9以外都可以

座机号码 /^\d{3}-\d{8}|\d{4}-\d{7}$/ | 或者不能有空格