Object.create和getPrototypeOf

create 方法创建一个新对象,使用现有的对象来提供新创建的对象的proto
getPrototypeOf() 方法返回指定对象的原型(内部[[Prototype]]属性的值)

  1. const people = {
  2. name: 'people',
  3. age: 18,
  4. };
  5. // Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__
  6. const man = Object.create(
  7. people,
  8. Object.getOwnPropertyDescriptors({
  9. height: '120cm',
  10. weight: '50kg',
  11. }),
  12. );
  13. // Object.getPrototypeOf() 方法返回指定对象的原型(内部[[Prototype]]属性的值)
  14. console.log(Object.getPrototypeOf(man));

getOwnPropertyDescriptors和getOwnPropertyDescriptor

getOwnPropertyDescriptors:方法用来获取一个对象的一个自身属性的描述符。
getOwnPropertyDescriptor:方法用来获取一个对象的一个自身属性的描述符。

  1. const people = {
  2. name: 'people',
  3. age: 18,
  4. };
  5. // Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__
  6. const man = Object.create(
  7. people,
  8. Object.getOwnPropertyDescriptors({
  9. height: '120cm',
  10. weight: '50kg',
  11. }),
  12. );
  13. // Object.getPrototypeOf() 方法返回指定对象的原型(内部[[Prototype]]属性的值)
  14. console.log(Object.getPrototypeOf(man));
  15. // Object.getOwnPropertyDescriptors() 方法用来获取一个对象的所有自身属性的描述符。
  16. console.log(Object.getOwnPropertyDescriptors(man));
  17. // Object.getOwnPropertyDescriptors() 方法用来获取一个对象的一个自身属性的描述符。
  18. console.log(Object.getOwnPropertyDescriptor(man, 'height'));
  19. // Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象
  20. Object.defineProperty(man, 'height', {
  21. value: '180cm',
  22. writable: true,
  23. });
  24. console.log(Object.getOwnPropertyDescriptor(man, 'height'));
  25. // Object.defineProperties方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象
  26. Object.defineProperties(man, {
  27. weight: {
  28. value: '49kg',
  29. },
  30. height: {
  31. value: '180cm',
  32. },
  33. });
  34. console.log(Object.getOwnPropertyDescriptors(man));
  35. // Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组
  36. console.log(Object.entries(man));

defineProperty和defineProperties

defineProperty:方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象
defineProperties:方法直接在一个对象上定义新的属性或修改现有属性【一个或者多个】,并返回该对象

  1. const people = {
  2. name: 'people',
  3. age: 18,
  4. };
  5. // Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__
  6. const man = Object.create(
  7. people,
  8. Object.getOwnPropertyDescriptors({
  9. height: '120cm',
  10. weight: '50kg',
  11. }),
  12. );
  13. // Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象
  14. Object.defineProperty(man, 'height', {
  15. value: '180cm',
  16. writable: true,
  17. });
  18. console.log(Object.getOwnPropertyDescriptor(man, 'height'));
  19. // Object.defineProperties方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象
  20. Object.defineProperties(man, {
  21. weight: {
  22. value: '49kg',
  23. },
  24. height: {
  25. value: '180cm',
  26. },
  27. });
  28. console.log(Object.getOwnPropertyDescriptors(man));