函数柯理化
一种函数的封装形式
把一个函数的两个参数拆开成为两个函数, 每个函数一个参数
多个参数的时候
把第一个参数单独提取出来
// 封装: 使用正则去验证用户名
function fn(reg, name) {
return reg.test(name)
}
// 使用的时候
const reg = /[^_]\w{5,11}/
const res = fn(reg, 'guoxiang')
const res2 = fn(reg, 'guoxiang3')
console.log(res)
console.log(res2)
// 以闭包的形式进行封装
function testName(reg) {
return function (username) {
return reg.test(username)
}
}
// res 接收的是 函数内部 返回的函数
const res = testName(/^[^_]\w{5,11}$/)
// 真正进行代码开发的时候
const res2 = res('jason')
console.log(res2)
复制代码
循环绑定事件
需求: 给每一个 button 绑定一个点击事件
点击每一个 button 的时候返回对应这个按钮的索引
以前的解决思路:
1. 循环的时候存储索引数据在元素身上
2. 利用闭包
//html部分
<button>1</button>
<button>2</button>
<button>3</button>
//js部分
var btns= document.querySelectorAll('button')
for (var i = 0; i < btns.length; i++) {
btns[i].onclick = (function (index) {
// 随着循环, 每一次这个自执行函数都会执行
// 这个被 return 出去的函数才是事件处理函数呢
return function () {
console.log('我执行了')
console.log(index)
}
})(i)
}
复制代码
继承 extend
构造函数的应用
当多个构造函数需要使用一些共同的方法或者属性的时候
我们需要把这些共同的东西单写一个公共的构造函数
方便其他的构造函数去继承自这个公共的构造函数的属性
+ 概念
让 乙 构造函数的实例能够使用 甲 构造函数的属性和方法
我们管 乙 构造函数叫做 甲 构造函数的子类
我们管 甲 构造函数叫做 乙 构造函数的父类
+ 目的:
让 乙 构造函数能够使用 甲 构造函数的属性和方法
如果一个 类 继承自 Perosn
可以使用 name, age, sayHi
// 动物类
function Animal(name, age) {
this.name = name
this.age = age
}
Animal.prototype.say = function () { console.log('各种声音') }
// 猫类
function Cat(eye) {
this.eye = eye
}
Cat.prototype.xingwei = function () { console.log('抓老鼠') }
// 鸟类
function Bird(body) {
this.body = body
}
Bird.prototype.fly = function () { console.log('飞') }
const c = new Cat('蓝黄')
console.log(c)
const b = new Bird('翅膀')
console.log(b)
复制代码
原型继承
利用改变 原型链 的方式来达到继承效果
直接把父类的实例当作子类的 prototype
构造函数的原型 对象
我把你的原型赋值为一个新的对象
new Perosn 的时候, 得到的也是一个新的对象
核心代码: 字类.prototype = new 父类
原型继承的优缺点
优点: 构造函数体内和原型上的都可以继承
缺点:
1. 一个构造函数的内容, 在两个位置传递参数
2. 继承来的属性不再子类实例的身上
// 子类
function Student(gender) {
this.gender = gender
}
// 直接把父类的实例当作字类的原型对象
Student.prototype = new Person('Jason', 18)
const s = new Student('男')
console.log(s)
// 现在开始
// Student.prototype = {
// name: 'Jason',
// age: 18,
// __proto__: { // Person.prototype
// constructor: Person,
// sayHi: function () { },
// __proto__: Object.prototype
// }
// }
//当你 new Student
s = {
gender: '男',
__proto__: {
// Student.prototype 也是 Person 的实例
name: 'Jack',
age: 18,
__proto__: {
// Person.prototype
constructor: Person,
sayHi: function () { },
__proto__: Object.prototype
}
}
}
//仔细观察一下这两个的区别,
复制代码
今天是周日 ,学了一天整理出来的也不是很好 ,况且今天时间也比较晚,发现喜欢并把一件事情一直坚持下去是非常快乐的事情,虽然过程很心酸 ,但是这种感觉感觉还是高中那会的感觉 ,希望自己能一直为这件事坚持下去吧。
评论