0
点赞
收藏
分享

微信扫一扫

web第六天

whiteMu 2022-02-19 阅读 87

    私有变量 
        在对象下变量通过this关键字进行执行,表示通过地址找到对象下的属性和方法,如果要定义私有的属性和方法,可以不通过this关键字定义
    例如:
        function Emp(age){
            var name="小明”//私有变量
            this.age=age
        }    
        var e=new Emp(22)
        console.log(e.age)
        console.log(e.name)
    this指向
        this关键字用于对象体内,用来指向对象下的属性和方法,方便调用
        Global:在node环境下this的全局作用域指向Global
        window:在浏览器环境下this的全局作用域指向window
        例如:
            var a=11
            console.log(a)
            console.log(window.a)
            console.log(this.a)
    this的指向和在哪定义,在哪执行都没有关系

    函数执行时,看函数前面是否有".",有的话,点前面是谁就指向谁,如果没有就指向window
    例如:
        var name="我是window"
        var obj={
            name:"我是obj",
            info:function(){
                console.log(this.name)
            }
        }
        console.loa(obj.name) //obj
        console.log(name)//window
    
    特殊情况
        1.当this出现在匿名函数里,永远指向的是window
        var name="我是window"
        var obj={
            name:"我是obi".
            info:function(){//匿名函数
                return function(){return this.name }
            }
        }
        var n=obj.info()()
        console.log(n)//window
        2.当给一个dom元素绑定一个事件的时候,事件执行的方法体内,this指向的是当前元素
        btn.οnclick=function(){
            console.log(this)//指向btn按钮
        }
        改变this指向
            var name="我是window"
            var obj={
                name:"我是obj",
                info:function(){//匿名函数
                    var th=this //在obj环境下存一个对象
                    return function(){return th.name }
                }
            }
            var n=obj.info()()
            console.log(n) //obj

继承
    当子类继承父类对象时,可以直接拿到父类下的属性和方法,无需自己重新定义,减少代码写作,js下是单继承,用原型链实现

原型链
每个构造器都有一个原型对象,原型对象包含一个指向构造器的指针,那么我们让原型对象对象指向另一个对象实例,就会实现机制
例如:
    function Father(){
        this.name="张三"
        this.say=function(){console.log(this.name)}
    }
    function Son(){
        this.age=23
    }
    Son.prototype=new Father()//继承
    var s=new Son()
    console.log(s.name)//可以调用父类的属性和方法

多态-重写
    子类和父类下有相同的方法执行不同的操作,默认执行过程是,先找自己下的属性或方法来执行,没有则去父类下找属性和方法,如果出现重名情况,则子类会覆盖父类方法
例如:
    function Father(){
        this.name="张三"
        this.say=function(){console.log("唱京剧")}
    }
    function Son(){
        this.age=23
        this.say=function(){console.log("唱流行歌曲")}
    }
    Son.prototype=new Father()//继承
    var s=new Son()
    s.say()//调用自己的方法,覆盖了父类的

改变this指向方法->call,apply,bind
    三个函数本身是用来改变this指向的,可以在任何对象下使用,在继承关系里,我们一般用他们来调用父类构造器,只不过定义上有区别
    调用对象.call(改变的对象,值1,值2,……)call定义多个参数
    调用对象.apply(改变的对象,[值1,值2,……])apply之定义对象和数组
    调用对象.bind(改变的对象,值1,值2,……)()bind返回一个函数自己手动执行
例如:
    function Father(name,sex){
        this.name=name
        this.sex=sex
    }
    function Son(name,sex,age){
        //Father.call(this,name,sex)
        //Father.apply(this,[name,sex])
        Father.bind(this,name,sex)()
        }
    Son.prototype=new Father()//继承
    var s=new Son("张明","男",12)
    console.log(s.name)
    console.log(s.sex)
    console.log(s.age)//可以输出构造器里的赋值

原型链的关键字
    prototype:用来指向对象原型
    _proto_:用来指向当前实例所属对象
    constructor:用来指向构造器
    实例有_proto_关键字,对象有prototype和constructor,构造器有prototype

举报

相关推荐

移动web第六天

rhcsa第六天

前端第六天

开课第六天

第六天笔记

【JavaSE 第六天】

0 条评论