JS基础--Object静态方法
文章目录
- 一、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静态方法相关推荐
- js基础---object对象
//**********************************复杂JSON举例****************************************var Jsondata={de ...
- JS中Object的方法汇总,包括assign、create、prototype等等
JavaScript Object JS的Object到底是啥东西呢?它有啥东西呢? 我们简单知道的,就是new一个Object实例对象,那这个实例对象又何Object又有什么关系呢? 先打印一下看看 ...
- AJAX学习前奏----JS基础加强
AJAX学习前奏----JS基础加强 知识概要: 1.js类&属性&方法的定义 2.静态属性与方法 3.构造方法 4.原型的使用 5.Object对象直接加属性和方法 6.JSO ...
- 【 js基础 Day4】面向过程,面向对象,自定义对象,内置对象
01 复习 函数:把一些重复的代码封装在一个地方,在需要的时候直接调用这个地方的代码就可以了 函数作用:代码重用 函数的参数: 1.形参:函数定义的时候,函数名字后面的小括号里的变量 2.实参:函数调 ...
- 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. ...
- JS基础-Java Class类以及获取Class实例的三种方式
JS基础-Java Class类以及获取Class实例的三种方式 由于JVM为每个加载的class创建了对应的Class实例,并在实例中保存了该class的所有信息,包括类名.包名.父类.实现的接口. ...
- JS基础知识学习(一)
JS基础知识 前端开发常用的浏览器 谷歌浏览器(chrome):Webkit内核(v8引擎) 火狐浏览器(firefox):Gecko内核 欧朋浏览器(opera):Presto内核 IE浏览器:Tr ...
- 前端面试题目汇总摘录(JS 基础篇 —— 2018.11.01更新)
温故而知新,保持空杯心态 JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string type ...
- JS基础篇--HTML DOM classList 属性
页面DOM里的每个节点上都有一个classList对象,程序员可以使用里面的方法新增.删除.修改节点上的CSS类.使用classList,程序员还可以用它来判断某个节点是否被赋予了某个CSS类. 添加 ...
最新文章
- 国外程序员整理的 C++ 资源大全
- OKR 和 KPI 的适用场景
- MySQL中用decimal的原因
- c linux time微秒_Python时间处理模块:time模块、datetime模块及日历模块Calendar
- access 导入txt 找不到可安装的isam_由浅入深:Python 中如何实现自动导入缺失的库?...
- 《中国人工智能学会通讯》——4.40 什么是类人概念学习?
- 别再骂中年人了,对他们好点吧~
- CI/CD 流程以及原理
- java实体类及类属性判空
- 有一个已经排好序的数组,输入一个数,将其插入到数组中,使得数组还是有序的。要求数组元素的值来自初始化
- 进阶学习,如何无代码设计一款美观且实用的网站?
- 大数据学长面试之boss直聘面试题
- SVM算法(三层境界)
- kurento项目介绍
- 使用WordPress的Elements插件创建主页
- MySQL8使用with recursive实现递归
- 深度linux deepin双屏,deepin nvidia 双显卡 双屏
- Windows 7防火墙设置详解(一)
- COMSOL仿真进阶RF及波动光学模块
- 云计算主要学些什么技术内容?零基础能学会吗?
热门文章
- python打印字典关键字_python高效字典操作
- 流式计算基础-6-1
- 说再见就会显得过于伤感一些
- Android 找不到资源异常,cordova - 离子3错误:找不到资源xml / network_security_config - 堆栈内存溢出...
- hexo-admin快速发布博客
- 合并排序算法(详解)
- Java常用API——ArrayList
- Ubuntu 18.04.4 禁用 nouveau
- EtherCAT理论学习笔记【一】-数据帧结构
- 【韧性架构设计】软件韧性:从意外中恢复的 7 个必备因素