01.显式原型与隐式原型.html 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <!DOCTYPE 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>01.显式原型与隐式原型</title>
  8. </head>
  9. <body>
  10. <!--
  11. 1、每个函数function都有一个prototype,即显式原型(显式原型属性)
  12. 2、每个实例对象都有一个__proto__,可称为隐式原型(隐式原型属性)
  13. 3、对象的隐式原型的值为其对应构造函数的显式原型的值
  14. 4、内存结构
  15. 5、总结:
  16. *函数的prototype属性:在定义函数时自动添加的,默认值是一个空Object对象
  17. *对象的__proto__属性:创建对象时自动添加的,默认值为构造函数的prototype属性值
  18. *程序员能直接操作显式原型,但不能直接操作隐式原型(ES6之前)
  19. -->
  20. <script>
  21. //定义构造函数
  22. function Fn(){ //内部语句:this.prototype = {}
  23. }
  24. // 1、每个函数function都有一个prototype,即显式原型
  25. console.log(Fn.prototype) //Object
  26. //2、每个实例对象都有一个__proto__,可称为隐式原型
  27. //创建实例对象
  28. var fn = new Fn() //内部语句:this.__proto__ = Fn.prototype
  29. console.log(fn.__proto__) //Object
  30. //3、对象的隐式原型的值为其对应构造函数的显式原型的值
  31. console.log(Fn.prototype === fn.__proto__) //true
  32. //给原型添加方法
  33. Fn.prototype.test = function(){
  34. console.log('test()')
  35. }
  36. //通过实例对象调用原型的方法
  37. fn.test() //输出结果为:test()
  38. </script>
  39. </body>
  40. </html>