image.png
    image.png
    image.png
    image.pngimage.png
    image.png
    image.png

    image.png
    image.png
    一般情况下,我们的公共属性定义到构造函数里面, 公共的方法我们放到原型对象身上
    image.png
    image.png

    image.png

    image.png
    image.png
    image.png

    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png

    image.png
    image.png
    image.png
    image.png

    image.png

    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. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>21-Object.defineProperty方法</title>
    8. </head>
    9. <body>
    10. <script>
    11. // Object.defineProperty() 定义新属性或修改原有的属性
    12. var obj = {
    13. id: 1,
    14. pname: '小米',
    15. price: 1999
    16. };
    17. // 1. 以前的对象添加和修改属性的方式
    18. // obj.num = 1000;
    19. // obj.price = 99;
    20. // console.log(obj);
    21. // 2. Object.defineProperty() 定义新属性或修改原有的属性
    22. Object.defineProperty(obj, 'num', {
    23. value: 1000,
    24. enumerable: true
    25. });
    26. console.log(obj);
    27. Object.defineProperty(obj, 'price', {
    28. value: 9.9
    29. });
    30. console.log(obj);
    31. Object.defineProperty(obj, 'id', {
    32. // 如果值为false 不允许修改这个属性值 默认值也是false
    33. writable: false,
    34. });
    35. obj.id = 2;
    36. console.log(obj);
    37. Object.defineProperty(obj, 'address', {
    38. value: '中国山东蓝翔技校xx单元',
    39. // 如果只为false 不允许修改这个属性值 默认值也是false
    40. writable: false,
    41. // enumerable 如果值为false 则不允许遍历, 默认的值是 false
    42. enumerable: false,
    43. // configurable 如果为false 则不允许删除这个属性 不允许在修改第三个参数里面的特性 默认为false
    44. configurable: false
    45. });
    46. console.log(obj);
    47. console.log(Object.keys(obj));
    48. delete obj.address;
    49. console.log(obj);
    50. delete obj.pname;
    51. console.log(obj);
    52. Object.defineProperty(obj, 'address', {
    53. value: '中国山东蓝翔技校xx单元',
    54. // 如果值为false 不允许修改这个属性值 默认值也是false
    55. writable: true,
    56. // enumerable 如果值为false 则不允许遍历, 默认的值是 false
    57. enumerable: true,
    58. // configurable 如果为false 则不允许删除这个属性 默认为false
    59. configurable: true
    60. });
    61. console.log(obj.address);
    62. </script>
    63. </body>
    64. </html>