• 原型的概念


    原型

    更好的解决方案: prototype

    Javascript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。

    这也就意味着,我们可以把所有对象实例需要共享的属性和方法直接定义在 prototype 对象上。

    构造函数、实例、原型三者之间的关系

     任何函数都具有一个 prototype 属性,该属性是一个对象

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>原型title>
    8. head>
    9. <body>
    10. body>
    11. <script>
    12. // 一、原型的作用:1、节省内存空间 2、实现数据共享(继承)
    13. // 二、什么是原型?
    14. // 结论1的推理
    15. function fn1 () {
    16. }
    17. console.log(fn1);
    18. console.log(fn1.prototype);
    19. var fn2 = function () { }
    20. console.log(fn2.prototype);
    21. // 结论2的推理
    22. function Person (name) {
    23. this.name = name;
    24. // this.age = age;
    25. }
    26. console.log(Person.prototype);
    27. // 四、如何节省内存空间:将公共的属性和方法挂载构造函数的原型对象上
    28. // 结论3的推理
    29. Person.prototype.age = 18;
    30. Person.prototype.eatIceCream = function () {
    31. console.log(this);
    32. console.log(this.name + "喜欢吃冰淇淋");
    33. }
    34. Person.prototype.eatIceCream()
    35. var p1 = new Person("小花");
    36. var p2 = new Person("小丽");
    37. var p3 = new Person("小红");
    38. console.log(p1);
    39. console.log(p2);
    40. console.log(p1.age);
    41. console.log(p2.age);
    42. p1.eatIceCream();
    43. p2.eatIceCream();
    44. console.log(p3.age);
    45. p3.eatIceCream();
    46. // 结论4:上午得出
    47. console.log(Person == p1.constructor);//true
    48. // 结论5的推理
    49. console.log(Person.prototype.constructor);
    50. console.log(Person.prototype.constructor == Person);//true
    51. // 结论6的推理
    52. console.log(p1);
    53. console.log(p2);
    54. console.log(p1.__proto__);
    55. console.log(p2.__proto__);
    56. var obj = {}
    57. console.log(obj);
    58. console.log(obj.__proto__);
    59. console.log(window);
    60. console.log(window.__proto__);
    61. console.log(p1.__proto__ == Person.prototype);//true
    62. /*
    63. 五、函数中this的指向
    64. 6、在原型函数中,
    65. (1)、如果通过原型调用函数,this指向原型对象
    66. (2)、如果通过实例化对象调用函数,this指向实例化对象
    67. */
    68. script>
    69. html>

    原型、构造函数、实例对象三者关系
          结论:
            1、任何一个函数都有一个prototype属性,它本身是一个对象,我们称之为原型
            2、构造函数也是函数,也有prototype属性
            3、构造函数中原型对象上的属性和方法都可以被构造函数的实例化对象所继承
            4、任何一个对象都有constructor属性,实例对象的constructor属性指向构造函数
            5、原型也是对象,也有constructor属性,原型对象的constructor属性指向构造函数
            6、任何一个对象都有__proto__属性,它是指针,实例化对象的__proto__属性指向构造函数的原型

  • 相关阅读:
    Apisix的ext-plugin-pre-req 中的trace 关联zipkin插件的trace
    大数据技术入门:impala查询引擎
    WebAssembly入门笔记[2]:利用Memory传递字节数据
    826. 单链表
    【Git】(六)子模块跟随主仓库切换分支
    Kotlin与Java写法的变更
    c++ 学习 之 继承的基本语法
    Spring事务简介说明
    学习记录:如何进行PWM 输出
    8.11模拟赛总结
  • 原文地址:https://blog.csdn.net/weixin_47619284/article/details/126551129