美文网首页
this的指向

this的指向

作者: 于默k | 来源:发表于2019-06-23 22:15 被阅读0次

    函数中的this是在运行时候决定的,而不是函数定义时
    全局环境中的this指window
    其他函数中的this指向调用它的对象
    使用call和apply改变函数中this的具体指向
    apply的参数需要放在一个数组里面
    bind改变this指向

    fn.bind(o)
    

    2改变this指向的方法
    callapply方法的使用

    函数体.call(obj)
    obj1={
    fn:function(){
    
    }
    }
    obj2 = {
    fn:function(){
    
    }
    }
    obj1.fn.call(obj2,,,,,,)call方法传参只需要使用多个逗号隔开
    

    apply方法需要将参数放在一个数组里
    以上两个方法改变函数的this指向并立即调用该函数

    bind在使用形式上合上面两个call和apply一样
    只不过不立即调用,经常在定时器,或其他回调函数等不立即调用的函数改变this指向时使用

    setTimeout(function(){}.bind(obj),1000)
    

    该匿名函数在1000毫秒后调用,使用bind改变this指向又不立即调用,符合该使用场景

    2.1 apply()方法的应用
    参数需要传入一个数组

    var obj1 = {
                    name:'zhangsan',
                    returName:function(){
                        return this.name;
                    }
                }
                var obj2 = {
                    name:'lisimao',
                    returName:function(str){
                        return this.name+str;
                    }
                }
                console.log(obj2.returName.apply(obj1,['666']))
    

    2.2 call()方法的应用()
    call方法和apply使用方法一致,只不过参数是直接传,不用数组盛放
    3原型模式(掌握)
    一个实例或者构造函数访问它的原型的方法

    obj.__proto__
    Person.prototype
    

    3.1原型模式创建对象语法(掌握)

    function Person(name,age){
                    this.name = name;
                    this.age = age;
                    this.add =function(x,y){
                        return this.age+x+y;
                    };
                }
                Person.prototype.add = function(x,y){
                    return this.age+x+y;
                }
    

    在构造函数中添加某个属性,与在构造函数的原型上添加某个属性是一样的效果
    只不过某些构造函数不对我们开放,而还想改变该构造函数生产出来的所有实例的属性,那就只能通过构造函数的原型来改变
    3.2理解原型对象(掌握)
    在js中所有的实例都有原型,原型也有原型,形成一条链条,就叫原型链,这条链条的起点是null
    继承:从实例开始往原型链而上,所有的祖辈拥有的属性,该实例都可调用。
    4掌握组合使用构造函数模式和原型模式(了解)
    5原型链prototype obj.__proto__.... Persion.prpototype.__proto__.....
    5.1实现原型链的基本模式(了解)
    5.2默认的原型(掌握)
    继承(近端对象可以使用远端祖辈身上的属性) 覆盖(链近端的同名属性会覆盖链远端的同名属性) 多态 (龙生九子,个个不同,但都是龙子)

    function Person1(){
                    this.add=function(){
                        return 'wo shi zhang san'
                    }
                }
                Object.prototype.add = function(){
                    return '666'
                }
                var obj1 = {name:1}
                obj1.__proto__ = new Person1();
                obj1.add = function(){
                    return '我最近'
                }
    

    6借用构造函数的问题

    寄生

    function Person1(){
                    var obj = new Object();
                    obj.add=function(){
                        return 'wo shi zhang san'
                    }
                    return obj;
                }
                var lizi = new Person1();
                console.log(lizi)
    

    6.1什么是构造函数(掌握)

    可同过new关键字调用 实例化一个对象的函数 一般将其首字母大写以和其他函数相区分
    new 关键字的作用
    新生成一个空白对象 改变this指向新创建出来的对象
    6.2传递参数(了解)

    7.掌握至少一种继承,了解其他继承方式及优缺点

    (1)通过构造函数继承
    (2)默认继承Object中的
    (3)通过原型继承
    

    相关文章

      网友评论

          本文标题:this的指向

          本文链接:https://www.haomeiwen.com/subject/ujbwqctx.html