IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> JS中Object的方法汇总,包括assign、create、prototype等等 -> 正文阅读

[JavaScript知识库]JS中Object的方法汇总,包括assign、create、prototype等等

JavaScript Object

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


先打印一下看看

console.dir(Object);

在这里插入图片描述

1、prototype

为啥要先说这个呢?——原型
这prototype里面的内容就是:new出来的对象的原型链上(__proto__)的内容
另一篇文章:{}对象的原型对象

2、assign(obj1, obj2)

官方解释:将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象。

理解:两个参数对象,把obj2合到obj1上,相同的属性会覆盖掉,更改obj1的内容,返回更改后的obj1。

let obj1 = {
 name: 'obj1',
  age: 18,
}
let obj2 = {
  age: 24,
  phone: 114
}
console.dir(Object.assign(obj1,obj2));
console.log(obj1);

在这里插入图片描述

2、create(obj)

官方解释:创建一个新对象,使用现有的对象来提供新创建的对象的__proto__

理解:参数是个对象,创建了个新对象,新对象有个[[Prototype]],里面的内容就是参数对象,这里在结合另一篇文章:{}对象的原型对象去瞅瞅

let obj1 = {
 name: 'obj1',
 age: 18,
}
console.dir(Object.create(obj1));

在这里插入图片描述

这里我又发现了另一个问题,另一篇文章:{}对象的原型对象里的{},如果是create()出来的,那参数应该是啥????换句话说,空对象的[[Prototype]]是谁???
let {} = Object.create(?????这里应该是啥)

3、defineProperties(obj, props)

官方解释:直接在一个对象上定义新的属性或修改现有属性,并返回该对象。

理解:定义一个对象的属性,通过设置某些值(第二个参数props里面)(或称之为描述符),使得这个对象的值具有自己的特点

第二个参数的值(描述符)有:

  • value: 这个属性的值,默认undefined
  • configurable:这个属性的描述符可不可以被修改和这个属性可不可以被删除,默认false
  • enumerable:该属性可不可以出现在对象的枚举属性中,默认false
  • writable:该属性的值(value)可不可以被修改,默认false
  • get:返回该属性的值,不可与value同用,默认undefined
  • set:设置该属性的值,默认undefined

就是说,默认全是false,什么情况下才会用这些东西呢?反之我是没用到过

1、基础使value

let obj = {};
Object.defineProperties(obj, {
  'property0': {
    value: 'Hello World', // 这个property0的值
  }
});
console.log(obj);//{property0: 'Hello World'}

给obj加了个属性:property0,值为’Hello World’


2、configurable

let obj = {};
Object.defineProperties(obj, {
  'property0': {
    value: 'Hello World',
    configurable:true,
  },
  'property1': {
    value: true,
  }
});

delete obj.property0;
delete obj.property1;
console.log(obj); // {property1: true}

属性property0可以被删除,property1不行。因为property0的configurable是true,至于文档说的可修改该属性的描述符没试


3、enumerable

let obj = {};
Object.defineProperties(obj, {
  'property0': {
    value: 'Hello World',
    configurable:true,
    enumerable:true
  },
  'property1': {
    value: true,
  },
  'property2': {
    value: [1,2,3],
    enumerable:true
  }
});

for (i in obj){
  console.log(i); // property0 property2
}

property0 property2两个属性可以被枚举到(我单纯的理解能被for…in到的就是可枚举的)


4、writable

let obj = {};
Object.defineProperties(obj, {
  'property0': {
    value: 'Hello World',
    configurable:true,
    enumerable:true
  },
  'property1': {
    value: true,
  },
  'property2': {
    value: [1,2,3],
    enumerable:true
  },
  'property3': {
    value: "ABCDEFG",
    writable:true
  },
});

Object.assign(obj, {
  property0:"yes", //TypeError: Cannot assign to read only property 'property0' of object
  property3:'lol'
})

console.log(obj); //{property0: 'Hello World', property2: Array(3), property1: true, property3: 'lol'}

property0不能被修改,会报错的。property3可以


5、get和set

let obj = {};
let property4Get = "LOL"
Object.defineProperties(obj, {
  'property0': {
    value: 'Hello World',
    configurable:true,
    enumerable:true
  },
  'property1': {
    value: true,
  },
  'property2': {
    value: [1,2,3],
    enumerable:true
  },
  'property3': {
    value: "ABCDEFG",
    writable:true
  },
  "property4":{
    get(){
      return "这是get方法返的" + property4Get
    },
    set(value){
      property4Get = value
    }
  }
});
console.log(obj.property4); //这是get方法返的LOL
obj.property4 = "LOLOLOL"
console.log(obj.property4); //这是get方法返的LOLOLOL

不能和value同用,property4直接用和直接改就行,见上边代码


4、defineProperty(obj, prop, descriptor)

和defineProperties一样都是去新建或修改对象的属性。但defineProperty是单个的去设置属性:defineProperty(obj, “property0属性名”, {描述符})

5、entries

待续~~~

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:20:29  更:2022-04-24 09:23:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:00:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码