构造函数继承、闭包

11 篇文章 0 订阅
9 篇文章 0 订阅
        // 继承
        // 构造函数中,子类可以继承父类构造函数的方法
        原型继承
        // 声明一个 人 的构造函数
        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为实参
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值