js Object assign\defindProperty\entries\values\getOwnPropertyDescriptor等方法使用

简单的进行了测试,进行了记录。详细参见MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object
欢迎指正与交流

<template>
  <div>
    <a
      href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object"
      target="_blank"
      rel="noopener noreferrer"
    >文档地址</a>
    <span>object keys使用:</span>
    <ul>
      <li v-for="(item,index) of this._keys" :key="index">{{item}}</li>
    </ul>
  </div>
</template>
<script>
export default {
  data() {
    return {
      student: {
        name: "jonny",
        age: 25,
        gender: "male",
        address: "重庆渝北龙兴",
        classes: {
          name: "1490008班",
          teacher: "小王"
        }
      },
      assignStudent: {}
    };
  },
  created() {
    this._defindProperty(this.student);
    //测试修改值
    //this.student.department='传媒学院';

    this._assign(this.student);

    //使用多个属性定义修改克隆的对象
    this._defineProperties(this.assignStudent);

    //对象属性描述
    this._getOwnPropertyDescriptor(this.student,'gender');
    this._entries(this.student);

    this._values(this.student);
  },
  computed: {
    _keys() {
      return Object.keys(this.student);
    }
  },
  methods: {
    //通过复制一个或多个对象来创建一个新的对象。
    _assign(student) {
      Object.assign(this.assignStudent, student);
    },
    _defindProperty(obj) {
      Object.defineProperty(obj, "department", {
        configurable: true, //configurable特性表示对象的属性是否可以被删除,以及除value和writable特性外的其他特性是否可以被修改。
        value: "软件学院",
        enumerable: true, //enumerable定义了对象的属性是否可以在 for...in 循环和 Object.keys() 中被枚举。
        writable: false //当writable属性设置为false时,该属性被称为“不可写”。它不能被重新分配。
      });
    },
    _defineProperties(obj) {
      Object.defineProperties(obj, {
        department: {
          configurable: true, //configurable特性表示对象的属性是否可以被删除,以及除value和writable特性外的其他特性是否可以被修改。
          value: "软件学院",
          enumerable: true, //enumerable定义了对象的属性是否可以在 for...in 循环和 Object.keys() 中被枚举。
          writable: false //当writable属性设置为false时,该属性被称为“不可写”。它不能被重新分配。
        },
        love:{
            enumerable:true,
            value:['篮球','打游戏','唱歌','跳舞']
        }
      });
    },
    /**
     * 获取属性定义
     */
    _getOwnPropertyDescriptor(obj,property){
        console.log(`对象属性【${property}】描述:`,Object.getOwnPropertyDescriptor(obj,property));        
    },
    _entries(obj) {
      for (let [key, value] of Object.entries(obj)) {
        if (typeof value === "object") {
          this._entries(value);
        } else console.log(`key:${key},value:${value}`);
      }
    },
    _values(obj) {
      console.log("student值为:", Object.values(obj));
    }
  }
};
</script>
posted @ 2020-02-12 17:59  Jonny-Xhl  阅读(131)  评论(0编辑  收藏  举报