对象进阶

作者: wy22 | 来源:发表于2021-12-01 08:37 被阅读0次

    1.this

    构造函数里面的this,用于给类定义成员(属性和方法)

    方法里面的this,指向方法的调用者

    箭头函数中没有this,如果在箭头函数中使用了this,会向外层寻找this的指向

    如果所有的外层都没有this,最终会指向window对象

      // 注意:构造函数不能使用箭头函数定义

            function Person(name,age){

                // 在构造函数中,this关键字,用于给类添加成员

                this.name = name

                this.age = age

                this.sayHi = function(){

                    console.log(`大家好!我叫${this.name},今年${this.age}岁`);

                }

            }

            // 创建对象,该对象会拥有,类型中定义的所有成员。

            let p1 = new Person('张三',20)

            console.log(p1);

            p1.sayHi()

            let p2 = new Person('李四',24)

            console.log(p2);

            p2.sayHi()

            console.log('-----------------------------------------');

            let obj1 = {

                //对象的两个属性

                name:'肖战',

                age:20,

                //对象的方法

                sayHi:function(){

                    // 在方法中,this指向方法的调用者,谁在调用该方法,this就指向谁

                    // 如果一个方法,不是由对象调用执行的,而是直接执行的,那么该方法里面的this就执行window对象

                    console.log(`Hi!我是${this.name},今年${this.age}岁`);

                },

                sayHello:()=>{

                    // 在箭头函数中没有this,如果在箭头函数中使用了this,它会向上一层函数中去找this

                    // 如果上一层函数也是箭头函数,或者没有上一层函数了,这个时候this就指向window对象。

                    console.log(`Hello!我是${this.name},今年${this.age}岁`);

                }

            }

            obj1.sayHi()

            let obj2 = {

                name:'关晓彤',

                age:22,

            }

            //可以将obj1的函数传给obj2,其实是obj2的sayHi方法,指向obj1的方法

            obj2.sayHi = obj1.sayHi

            obj2.sayHi()

            //将obj1身上的函数,传给了一个sayHi变量

            let sayHi = obj1.sayHi

            window.name = '小明'   //设置window对象的name属性

            window.age = 22        //设置window对象的age属性

            sayHi()

      // var 定义的成员,会自动添加为window对象的成员

    2.call apply bind

    call apply bind 更改方法里面this的指向

    1.使用call()改变方法里面,this的指向

    call()方法的第一个参数必须是指定的对象,方法的原有参数,挨个放在后面

    2.使用apply(),也可以改变方法里面this的指向,第一个参是指定的对象,方法的原有参数,统一放到第二个数组参数中。

    3.使用bind(),也可以改变方法里面this的指向,用法给call()一样

    call()是直接运行方法,bind()是返回新的方法,然后再重新调用。

    相关文章

      网友评论

        本文标题:对象进阶

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