文章目录

  • 一、Object静态方法
    • 1.getPrototypeOf()
    • 2.getOwnPropertyNames()
    • 3.keys()
    • 4.values()
    • 5.defineProperty()
    • 6.create()
    • 7.getOwnPropertyDescriptor(obj,propName)
    • 8.preventExtensions(obj)
    • 9.seal()
    • 10.freeze(obj)
    • 11.判断是否设置了某方法

一、Object静态方法

静态方法就是直接使用类名调用的方法
object中静态方法有哪些?

1.getPrototypeOf()

Object.getPrototypeOf()获取对象的原型,相当于obj._proto_

         function fn () {}fn.prototype=["ljy",22]var obj=new fn()var re=Object.getPrototypeOf(obj)//==>obj.__prto__console.log(re)

2.getOwnPropertyNames()

Object.getOwnPropertyNames()将obj的可枚举和不可枚举的属性的名称组成一个数组返回

         var obj=[10,203,4]var re=Object.getOwnPropertyNames(obj)console.log(obj,re)

3.keys()

Object.keys()返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致 。

         var obj={name:'akren',age:20}var re=Object.keys(obj)console.log(re)

4.values()

Object.values() 方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用 for…in 循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。

         var obj={name:'ljy',age:22}var re=Object.values(obj)console.log(re)

5.defineProperty()

Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
可以一次性定义多个值。

描述符 作用
configurable 当且仅当该属性的 configurable 键值为 true 时,该属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认为 false。
enumerable 当且仅当该属性的 enumerable 键值为 true 时,该属性才会出现在对象的枚举属性中。默认为 false。
value 该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 undefined。
writable 当且仅当该属性的 writable 键值为 true 时,属性的值,也就是上面的 value,才能被赋值运算符改变。默认为 false。
get 属性的 getter 函数,如果没有 getter,则为 undefined。当访问该属性时,会调用此函数。执行时不传入任何参数,但是会传入 this 对象(由于继承关系,这里的this并不一定是定义该属性的对象)。该函数的返回值会被用作属性的值。默认为 undefined。
set 属性的 setter 函数,如果没有 setter,则为 undefined。当属性值被修改时,会调用此函数。该方法接受一个参数(也就是被赋予的新值),会传入赋值时的 this 对象。默认为 undefined。

案例1:

         var obj={}var temp;Object.defineProperty(obj,"ljy",{set(arg){                            //设置存入的数据temp=arg;console.log("您存入了"+arg)   //当我们给这个属性存入时就打印("您存入了"+arg)},get(){                     //获得存入数据return temp+'岁'  //当我们获取这个属性的数据时返回temp+'岁'}})obj.ljy=22console.log(obj['ljy'])

案例2:

         var obj={}Object.defineProperty(obj,"ljy",{enumerable:true,value:666,writable:false,   //value不会被赋值运算符改变})obj.ljy=22console.log(obj['ljy'])

6.create()

Object.create() 方法创建一个新对象,使用现有的对象来提供新创建的对象的原型。也称为工厂函数。

         var obj = Object.create([10,20,30],{'ljy':{     //第一个参数表示原型,第二个参数表示对象属性和属性值描述跟defineProperty()一样。value:22,writable:false}});console.log(obj)   //打印的Array代表原型是数组

7.getOwnPropertyDescriptor(obj,propName)

Object.getOwnPropertyDescriptor() 方法返回指定对象上一个自有属性(propName)对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性)

          var obj={name:"karen"}var f1=Object.create(obj,{life:{value:'ljy'}})console.log(f1)var re=Object.getOwnPropertyDescriptor(f1,"life")console.log(re)

8.preventExtensions(obj)

Object.preventExtensions() 方法让一个对象变的不可扩展,也就是永远不能再添加新的属性。

         var obj={ljy:22}Object.preventExtensions(obj)obj.age=200console.log(obj,obj.age)

9.seal()

Object.seal() 方法封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置。
当前属性的值只要原来是可写的就可以改变。

           var obj={ljy:22}var re=Object.seal(obj)obj.age=22delete obj.ljyconsole.log(obj)

10.freeze(obj)

可以禁止对obj的所有操作,它相对与preventExtensible方法而言,将属性的configurable属性和writable属性都设置为了false。

         var obj={ljy:22}var re=Object.freeze(obj)delete obj.ljyobj.ljy=100obj.age=20console.log(obj)

11.判断是否设置了某方法

Object.isExtensible(obj)、Object.isSealed(obj)、Object.isFrozen(obj) 分别对应了上述三个方法是否对obj进行了设置

         var obj={ljy:22}var re=Object.freeze(obj)delete obj.ljyobj.ljy=100obj.age=20console.log(obj,Object.isFrozen(obj))

JS基础--Object静态方法相关推荐

  1. js基础---object对象

    //**********************************复杂JSON举例****************************************var Jsondata={de ...

  2. JS中Object的方法汇总,包括assign、create、prototype等等

    JavaScript Object JS的Object到底是啥东西呢?它有啥东西呢? 我们简单知道的,就是new一个Object实例对象,那这个实例对象又何Object又有什么关系呢? 先打印一下看看 ...

  3. AJAX学习前奏----JS基础加强

     AJAX学习前奏----JS基础加强 知识概要: 1.js类&属性&方法的定义 2.静态属性与方法 3.构造方法 4.原型的使用 5.Object对象直接加属性和方法 6.JSO ...

  4. 【 js基础 Day4】面向过程,面向对象,自定义对象,内置对象

    01 复习 函数:把一些重复的代码封装在一个地方,在需要的时候直接调用这个地方的代码就可以了 函数作用:代码重用 函数的参数: 1.形参:函数定义的时候,函数名字后面的小括号里的变量 2.实参:函数调 ...

  5. 12、数据系统内置功能(字符串、数组、时间、Math、遍历器、对象成员检测、Object静态方法、对象序列化、正则表达式)

    目录 12.1字符串 12.1.1特效标签 12.1.2字符串截子串 12.2 数组 12.3时间 12.4Math 12.5遍历器 1.for 循环 2.for in 循环  (es5的技术) 3. ...

  6. JS基础-Java Class类以及获取Class实例的三种方式

    JS基础-Java Class类以及获取Class实例的三种方式 由于JVM为每个加载的class创建了对应的Class实例,并在实例中保存了该class的所有信息,包括类名.包名.父类.实现的接口. ...

  7. JS基础知识学习(一)

    JS基础知识 前端开发常用的浏览器 谷歌浏览器(chrome):Webkit内核(v8引擎) 火狐浏览器(firefox):Gecko内核 欧朋浏览器(opera):Presto内核 IE浏览器:Tr ...

  8. 前端面试题目汇总摘录(JS 基础篇 —— 2018.11.01更新)

    温故而知新,保持空杯心态 JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string type ...

  9. JS基础篇--HTML DOM classList 属性

    页面DOM里的每个节点上都有一个classList对象,程序员可以使用里面的方法新增.删除.修改节点上的CSS类.使用classList,程序员还可以用它来判断某个节点是否被赋予了某个CSS类. 添加 ...

最新文章

  1. 国外程序员整理的 C++ 资源大全
  2. OKR 和 KPI 的适用场景
  3. MySQL中用decimal的原因
  4. c linux time微秒_Python时间处理模块:time模块、datetime模块及日历模块Calendar
  5. access 导入txt 找不到可安装的isam_由浅入深:Python 中如何实现自动导入缺失的库?...
  6. 《中国人工智能学会通讯》——4.40 什么是类人概念学习?
  7. 别再骂中年人了,对他们好点吧~
  8. CI/CD 流程以及原理
  9. java实体类及类属性判空
  10. 有一个已经排好序的数组,输入一个数,将其插入到数组中,使得数组还是有序的。要求数组元素的值来自初始化
  11. 进阶学习,如何无代码设计一款美观且实用的网站?
  12. 大数据学长面试之boss直聘面试题
  13. SVM算法(三层境界)
  14. kurento项目介绍
  15. 使用WordPress的Elements插件创建主页
  16. MySQL8使用with recursive实现递归
  17. 深度linux deepin双屏,deepin nvidia 双显卡 双屏
  18. Windows 7防火墙设置详解(一)
  19. COMSOL仿真进阶RF及波动光学模块
  20. 云计算主要学些什么技术内容?零基础能学会吗?

热门文章

  1. python打印字典关键字_python高效字典操作
  2. 流式计算基础-6-1
  3. 说再见就会显得过于伤感一些
  4. Android 找不到资源异常,cordova - 离子3错误:找不到资源xml / network_security_config - 堆栈内存溢出...
  5. hexo-admin快速发布博客
  6. 合并排序算法(详解)
  7. Java常用API——ArrayList
  8. Ubuntu 18.04.4 禁用 nouveau
  9. EtherCAT理论学习笔记【一】-数据帧结构
  10. 【韧性架构设计】软件韧性:从意外中恢复的 7 个必备因素