对象进阶

作者: 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()是返回新的方法,然后再重新调用。

相关文章

  • js进阶(二)

    第十二天 04-基础进阶-第02天{对象进阶、内置对象} 第十二天对象工厂模式创建对象构造函数模式创建对象原型模式...

  • 对象进阶

    1.this 构造函数里面的this,用于给类定义成员(属性和方法) 方法里面的this,指向方法的调用者 箭头函...

  • JS基础到高级

    JS高级-进阶目录======================基础Web API面向对象编程继承函数进阶正则表达式...

  • 前端基础进阶系列

    前端基础进阶(一):内存空间详细图解前端基础进阶(二):执行上下文详细图解前端基础进阶(三):变量对象详解前端基础...

  • 面向对象进阶

    decorotor - 装饰器/包装器 @property装饰器 之前我们讨论过Python中属性和方法访问权限的...

  • 面向对象进阶

    ### 动态添加属性: 1. `对象.属性名=xx`的形式。 2. 通过`setattr(对象,属性名,这个属性对...

  • 面向对象进阶

    isinstance 检测对象与类之间的关系print(isinstance(a,A))print(isinsta...

  • 面向对象进阶

    1. 抽象类和抽象方法 抽象类:使用abstract修饰的类,包含抽象方法的类必须是抽象类,但抽象类不一定包含抽象...

  • JavaScript学习笔记(三)

    慕课网JavaScript进阶篇第7章学习笔记,JavaScript内置对象:Date对象,String字符串对象...

  • Python(四十)JavaScript进阶

    Python(四十)JavaScript进阶 这篇文章主要涉及的内容是JS中的内置对象(Math对象以及日期对象)...

网友评论

    本文标题:对象进阶

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