zoukankan      html  css  js  c++  java
  • JavaScript defineProperties

    function defineProperties(obj, properties)
    {
      function convertToDescriptor(desc)
      {
        function hasProperty(obj, prop)
        {
          return Object.prototype.hasOwnProperty.call(obj, prop);
        }

        function isCallable(v)
        {
          // 如果除函数以外,还有其他类型的值也可以被调用,则可以修改下面的语句
          return typeof v === "function";
        }

        if (typeof desc !== "object" || desc === null)
          throw new TypeError("不是正规的对象");

        var d = {};
        if (hasProperty(desc, "enumerable"))
          d.enumerable = !!obj.enumerable;
        if (hasProperty(desc, "configurable"))
          d.configurable = !!obj.configurable;
        if (hasProperty(desc, "value"))
          d.value = obj.value;
        if (hasProperty(desc, "writable"))
          d.writable = !!desc.writable;
        if (hasProperty(desc, "get"))
        {
          var g = desc.get;
          if (!isCallable(g) && g !== "undefined")
            throw new TypeError("bad get");
          d.get = g;
        }
        if (hasProperty(desc, "set"))
        {
          var s = desc.set;
          if (!isCallable(s) && s !== "undefined")
            throw new TypeError("bad set");
          d.set = s;
        }

        if (("get" in d || "set" in d) && ("value" in d || "writable" in d))
          throw new TypeError("identity-confused descriptor");

        return d;
      }

      if (typeof obj !== "object" || obj === null)
        throw new TypeError("不是正规的对象");

      properties = Object(properties);
      var keys = Object.keys(properties);
      var descs = [];
      for (var i = 0; i < keys.length; i++)
        descs.push([keys[i], convertToDescriptor(properties[keys[i]])]);
      for (var i = 0; i < descs.length; i++)
        Object.defineProperty(obj, descs[i][0], descs[i][1]);

      return obj;
    }
  • 相关阅读:
    MyBatis之三:多表联合查询
    MyBatis之二:简单增删改查
    MyBatis之一:入门
    如何用Maven创建web项目(具体步骤)
    Maven3.2创建webapp项目过程中问题以及解决方案
    纯前端下载数据Excel文档
    centos7 yum无法正常工作
    Element ui table selection 分页支持保存已经选中的数据,同时支持随时删除选中的数据,并设置默认选择
    删除排序数组中的重复选项
    列表数据(包含父节点关系)转化为树形结构
  • 原文地址:https://www.cnblogs.com/shidengyun/p/5437488.html
Copyright © 2011-2022 走看看