// 继承
// 构造函数中,子类可以继承父类构造函数的方法
原型继承
// 声明一个 人 的构造函数
function Person(name) {
this.name = name
this.say = function () {
console.log(this.name + '能说话');
}
}
// 给 人 添加原型方法
Person.prototype.eat = function () {
console.log(this.name + '在吃饭');
}
// 声明一个学生构造函数
function Stundent(num, name) {
this.num = num
Person.call(this, name) //调用父构造函数,传参,改变this指向
}
//让学生这个构造函数的原型指向人这个构造函数
Stundent.prototype = new Person()
let s1 = new Stundent(1002, 'rose')
s1.say() //使用继承父亲的方法
s1.eat() //使用继承父亲原型的方法
class类继承
// 人类
class Person {
constructor(name, age) {
this.name = name
this.age = age
}
say() {
console.log(this.name + '说话');
}
}
// 学生类
class Student extends Person { //学生继承人 extends关键字
constructor(num, name, age) {
//实例化子类之前先实例化父类,实例化父类就是执行父类构造器
super(name, age) //super(参数)关键字 完成继承
this.num = num
}
}
let s1 = new Student(1001, 'jack', 20) //创建学生对象
s1.say() //jack说话
let s2 = new Student(1002, 'rose', 15)
s2.say() //rose说话
// 闭包
// 概念
// 有一个A函数, 在A函数内部返回一个B函数
// 在B函数内部, 访问一个A函数私有变量
// 在A函数外部, 有一个变量引用返回的B函数
function A() {
let num = 100
return function B() {
console.log(num);
}
}
let f = A()
console.log(f); //console.log(num);
f() // 100
// 闭包特点
//1.作用域空间不销毁
//2.可以利用闭包,在一个函数外部,访问内部的变量
//3.保护私有变量(可以把一些变量放在函数里面,不会污染全局)
// 案例
for (var i = 0; i < btnEles.length; i++) {
(function (k) {
var num = 0
btnEles[k].onclick = function () {
spanEles[k].innerHTML = ++num
}
})(i) //自调用函数 i为实参
}
构造函数继承、闭包
于 2021-12-27 17:58:04 首次发布