5.原型和原型链.html 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <script>
  10. // 普通函数
  11. // function fn() {
  12. // return 5;
  13. // };
  14. // console.log(fn())
  15. // // 匿名函数
  16. // let fn1 = function() {}
  17. // // 立即执行函数
  18. // (function() {})();
  19. /**
  20. * 构造函数
  21. * 1.首字母大写
  22. * 2.new进行实例化调用
  23. * 3.this指向当前实例
  24. * 4.不用return进行反值
  25. * 属性写在构造函数中
  26. * 方法写在原型中
  27. * 构造函数中自带了prototype属性 指向的是当前构造函数的原型
  28. */
  29. function Fn() {
  30. // console.log(this)
  31. this.name = '图图';
  32. this.age = 3;
  33. Fn.prototype.address = function () {
  34. console.log("我家住在翻斗花园");
  35. }
  36. }
  37. // 实例化调用
  38. let f = new Fn();
  39. console.log(f);
  40. f.address();
  41. /**
  42. * 原型:
  43. * 1.所有的构造函数中都自带了一个prototype属性(显性),该属性指向的就是当前构造函数的原型
  44. * 2.所有的构造函数都自带了一个构造器constructor(隐性),该属性指向的是当前原型的构造函数
  45. * 3.构造函数可以通过new进行实例化 产生该构造函数的实例化对象
  46. * 4.实例化对象 可以通过_proto_(隐性)方法 访问到该构造函数原型中的属性和方法
  47. */
  48. function Person() {};
  49. var person = new Person();
  50. console.log(person.__proto__ == Person.prototype);
  51. console.log(Person.prototype.constructor == Person);
  52. console.log(Object.getPrototypeOf(person) === Person.prototype);
  53. /**
  54. * 原型链
  55. * 访问对象属性时 先从对象本身去进行寻找
  56. * 通过_proto_去原型上找
  57. * 若还未找到 则在原型对象的原型上找 找到则返回 找不到则返回undefined
  58. */
  59. </script>
  60. </body>
  61. </html>