• js高级 笔记01


    01 静态成员和实例成员

            构造函数中的属性和方法我们称之为成员 成员是可以添加的

            通过构造函数new出来的对象叫做实例化对象

                    实例成员就是构造函数内部通过this添加的对象       

                    实例成员只能通过实例化对象去访问  不能通过构造函数去访问

             静态成员 是在构造函数本身上添加的成员  不能通过实例化对象去访问

    02 原型对象

            在构造函数里有prototype属性 也叫做原型对象 共享的方法都放到原型对象里面

            原型是一个对象 我们称prototype为原型对象(构造函数的一个属性)

            原型对象的作用是  共享方法  不需要开辟内存空间

            一般情况下 我们把公共属性放到构造函数里面  公共方法放到我们的原型对象里面

    03 对象原型

            为什么实例化对象能使用构造函数的原型对象里面的方法呢?

                    因为对象里面有一个系统自带的属性__proto__ 指向了构造函数的原型对象

            prototype原型对象

            __proto__对象原型

                    指向的是构造函数的原型对象 但他是非标准的属性

                    在实际开发中 不可以使用这个属性 这个属性只是指明了一条路线

    04 constructor

            构造函数方法比较多的时候  往原型对象中添加 用对象的形式去写

            如果我们修改了原型对象  给原型对象赋值了一个新对象的时候导致原来的constructor没有了

            所以我们必须手动的利用constructor指回原来的构造函数

    05 原型链

            只要是对象就有__proto__属性 指向 原型对象

            原型对象里面的__proto__指向的是Object.prototype(object的实例化对象)

            object.prototype原型对象里面有__proto__指向的是null

            这个链条就叫做原型链

            原型链上面的成员查找规则是  就近原则

            原型对象中的this指向实例化对象

    06 call方法

            call( ) 可以调用函数

            call( ) 可以改变这个函数的this指向

    1. function fn(x,y){
    2. console.log('');
    3. console.log(this);
    4. console.log(x+y);
    5. }
    6. var obj={
    7. name:'狗蛋'
    8. }
    9. fn.call(obj,1,2)
    10. //以上调用 函数的this指向了obj这个对象 后面的就是普通参数

    07 借用原型对象继承方法
    1. //父构造函数
    2. function Father(uname,age){
    3. this.uname=uname
    4. this.age=age
    5. }
    6. //能挣钱
    7. Father.prototype.money=function(){
    8. console.log(100000);
    9. }
    10. // 子构造函数
    11. function Son(uname,age,score){
    12. Father.call(this,uname,age)
    13. this.score=score
    14. }
    15. // Son.prototype=Father.prototype
    16. //因为这样赋值之后 两个原型对象的内存地址相同了 然后一改全改
    17. // 如果按照上面的直接赋值绘存在问题 子原型对象修改了 父原型对象也跟着修改了
    18. Son.prototype=new Father();
    19. //实例化了父构造函数 赋值给了子构造函数的原型对象
    20. // 父实例化对象可以访问父原型对象的方法 因为有__proto__的存在
    21. // 子实例化对象本身没有这个方法 去子构造函数的原型对象上面找 也没有 然后发现
    22. // 子原型对象指向了父的实例化对象 父的实例化对象有一个__proto__指向了父的原型对象
    23. // 然后父的原型对象上面有这个方法了 所以就可以继承了
    24. // 子构造函数有他自己的专门的方法
    25. Son.prototype.constructor=Son
    26. Son.prototype.exam=function(){
    27. console.log('孩子要考试');
    28. }
    29. var son=new Son('小黑',10,100)
    30. console.log(son);
    31. son.money()
    32. son.exam()
    33. console.log(Father.prototype);
    34. console.log(Son.prototype.constructor);

  • 相关阅读:
    118. 杨辉三角
    流水线上的农民:我在工厂种蔬菜
    记录beforeRouteEnter函数内部 this 是undefined的解决方案
    JavaScript 字符串 原理 + 字符串拼接 + 模板字符串详解 +案例
    JavaScript 运行时比较: Node.js、 Deno 和 Bun
    redis事务
    XML学习笔记
    java计算机毕业设计高校多媒体设备报修管理系统MyBatis+系统+LW文档+源码+调试部署
    分类算法——支持向量机 详解
    数据科学中常见的9种距离度量方法,内含欧氏距离、切比雪夫距离等
  • 原文地址:https://blog.csdn.net/m0_47045804/article/details/137893743