Object方法详解_object 方法解析-程序员宅基地

技术标签: JavaScript  javascript  

Object.defineProperty(obj,propertyName,{})

  • 给对象添加属性(指定描述符)
  • 设置对象属性的元属性
  const person = {
    
  firstName: "chen",
  lastName: "guanxi",
};

// 定义对象的属性的属性(原属性)
Object.defineProperty(person, "fullname", {
    
  // value:'chen guanxi',  属性的值
  configurable: false, // 是否可以重新配置或者删除
  // writable:true,  // 是否可以枚举
  enumerable: true, // 是否可以枚举,遍历, for in
  get() {
    
    // 属性读取时会调用的方法(返回值就是属性的值)
    return this.firstName + " " + this.lastName;
  },
  set(newVal) {
    
    // console.log(newVal);   luo yonghao
    // 利用数组一一对应关系来解构
    const [firstName, lastName] = newVal.split(" ");
    console.log(firstName); // luo
    console.log(lastName); // yonghao
    // console.log(this); { firstName: 'chen', lastName: 'guanxi', fullname: [Getter/Setter] }
    this.firstName = firstName;
    this.lastName = lastName;
  },
});

// 此时会调用get方法
console.log(person.fullname); //chen guanxi

// 此时会调用set方法
person.fullname = "luo yonghao";

console.log(person);
// { firstName: 'chen', lastName: 'guanxi', fullname: [Getter/Setter] } 修改前
// { firstName: 'luo', lastName: 'yonghao', fullname: [Getter/Setter] } 修改后

Object.keys()

不会遍历原型链

  • 返回一个所有元素为字符串的数组,其元素来自于从给定的object上面可直接枚举的属性。这些属性的顺序与手动遍历该对象属性时的一致。
// simple array
var arr = ['a', 'b', 'c'];
console.log(Object.keys(arr)); // console: ['0', '1', '2']

// array like object
var obj = {
     0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(obj)); // console: ['0', '1', '2']

// array like object with random key ordering
var anObj = {
     100: 'a', 2: 'b', 7: 'c' };
console.log(Object.keys(anObj)); // console: ['2', '7', '100']

// getFoo is a property which isn't enumerable
var myObj = Object.create({
    }, {
    
  getFoo: {
    
    value: function () {
     return this.foo; }
  } 
});
myObj.foo = 1;
console.log(Object.keys(myObj)); // console: ['foo']

Object.values()

不会遍历原型链

  • 返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用for…in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。
var obj = {
     foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]

// array like object
var obj = {
     0: 'a', 1: 'b', 2: 'c' };
console.log(Object.values(obj)); // ['a', 'b', 'c']

// array like object with random key ordering
// when we use numeric keys, the value returned in a numerical order according to the keys
var an_obj = {
     100: 'a', 2: 'b', 7: 'c' };
console.log(Object.values(an_obj)); // ['b', 'c', 'a']

// getFoo is property which isn't enumerable
var my_obj = Object.create({
    }, {
     getFoo: {
     value: function() {
     return this.foo; } } });
my_obj.foo = 'bar';
console.log(Object.values(my_obj)); // ['bar']

// non-object argument will be coerced to an object
console.log(Object.values('foo')); // ['f', 'o', 'o']

Object.prototype.hasOwnProperty()

  • 所有继承了 Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性;和 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性。
  const obj = {
    
    a: 1,
  };
  obj.__proto__.b = 2;
  console.log(Object.keys(obj)); // ["a"]

  for (const key in obj) {
    
    console.log(key); // a b
    if (obj.hasOwnProperty(key)) {
    
      console.log(key); // a
    }
  }
  for (const key in obj) {
    
    console.log(key); // a b
    if (Object.prototype.hasOwnProperty.call(obj, key)) {
    
      console.log(key); // a
    }
  }
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/rollsroycewk/article/details/110197975

智能推荐

【Fidder报错】Fail binding !unable to load fidder for code-completion support.解决办法_unable to load fiddler for code-completion support-程序员宅基地

文章浏览阅读2.9k次。一定要记住,没有什么问题是重装解决不了的事,如果有,那就多重装几次,总比耗时间百度找答案,还不一定有结果!!!使用fidder自定义规则时,也就是customize rules总会有各种报错,比如Fail binding !unable to load fidder for code-completion support 或着找不到Fidder ScriptEditor工具,归根揭底是f..._unable to load fiddler for code-completion support

GeoGebra Classic 5 初探——画点、直线、直角_geogebraclassic5-程序员宅基地

文章浏览阅读1.2w次。一、下载软件GeoGebra Classic 5 是一款免费的画图软件.下载网址是:https://www.geogebra.org/download在这个页面下选择“GeoGebra经典5”,这款软件是一款基于WIN32的程序.而“GeoGebra经典6”是基于WEB富客户端的程序,理念上显得更先进一些.图1 下载 GeoGebra经典5二、GeoGebra是自由软件从..._geogebraclassic5

Zookeeper框架Curator使用_curator-x-discovery-程序员宅基地

文章浏览阅读574次。简介Curator是Netflix公司开源的一套Zookeeper客户端框架。了解过Zookeeper原生API都会清楚其复杂度。Curator帮助我们在其基础上进行封装、实现一些开发细节,包括接连重连、反复注册Watcher和NodeExistsException等。目前已经作为Apache的顶级项目出现,是最流行的Zookeeper客户端之一。从编码风格上来讲,它提供了基于Fluent的编程风格支持。除此之外,Curator还提供了Zookeeper的各种应用场景:Recipe、共享锁服务、Mast_curator-x-discovery

【DB】数据库面试笔试题库及详解(小麦苗DBA宝典出品)--数据库运维宝典-程序员宅基地

文章浏览阅读918次。DB笔试面试历史连接--2019DB笔试面试历史连接--2018DB笔试面试历史连接--2017DB笔试面试历史连接--2016小麦苗课堂培训认证OCP培训说明连接:ht..._db宝面试

OPENSHIFT-280-9-调整应用副本_oc scale dc greeter --replicas=5-程序员宅基地

文章浏览阅读631次。1.oc project samples指定使用的项目。[student@workstation ~]$ oc project samplesAlready on project "samples" on server "https://master.lab.example.com:8443". 2.oc get dc -o wide查看部署配置资源的信息。[student@wor..._oc scale dc greeter --replicas=5

获取两个字符串中的最大相同子串_c#两个字符串相同最多的词组-程序员宅基地

文章浏览阅读131次。****获取两个字符串中的最大相同子串,比如: str1="abcwerthelloyuiodefabcdef";str2="cvhellobnm" 提示:将短的那个串进行长度依次递减的子串与较长的串比较**前提:两个字符串中只有一个最大相同子串public String getMaxSameString(String str1,String str2){ if(str1!=null&&str2!=null){ String maxStr=(st_c#两个字符串相同最多的词组

随便推点

QGis二次开发:坐标转换_qgis经纬度转坐标函数-程序员宅基地

文章浏览阅读2.3k次。地图经纬度坐标转qt控件坐标const QgsPointXY &pointqDebug() << m_mapCanvas->getCoordinateTransform()->transform(point).x() << m_mapCanvas->getCoordinateTransform()->transform(point).y(..._qgis经纬度转坐标函数

Android 学习笔记三:Activity_android:text="@string/title"是什么意思-程序员宅基地

文章浏览阅读845次。继续上一章,我们看了一下基本的目录结构。那么现在我们要把那个简单的Helloworld界面改的复杂一点了。增加输入框和按钮现在把helloworl改成一个登录界面。需要增加两个输入框和一个按钮:增加事件监听现在我们希望在点击登录按钮之后能有一些反应,比如弹出一个对话框什么的。需要做的就是给Button绑定一个click事件。protected void initialize() { Butt_android:text="@string/title"是什么意思

01-环境搭建、SpringCloud微服务-黑马头条-程序员宅基地

文章浏览阅读708次,点赞20次,收藏13次。01-环境搭建、SpringCloud微服务-黑马头条

【Unity3D程序员】面试经历_ilruntime 面试-程序员宅基地

文章浏览阅读1.3k次。1. SLG,游戏框架设计部分? 了解?思路很相近,基本框架都是一样的。根据主程的需求,每个主程都有一套自己的习惯,比如加注释,不然的话,会死的很惨。2. 怎么进行数据分离呢????? 逻辑层和数据层,为什么要分离开?3. 怎么进行热更,资源和代码呢?ILRuntime ,可以加功能,只是不能修改主工程的东西。ILRuntime ,这个性能有问题,什么问题呢..._ilruntime 面试

NeoVim 安装及配置-程序员宅基地

文章浏览阅读1.5w次,点赞10次,收藏63次。NeoVim安装_neovim

curl下载文件的命令_curl download-程序员宅基地

文章浏览阅读4.2w次,点赞4次,收藏8次。curl文件下载curl将下载文件输出到stdout,将进度信息输出到stderr,不显示进度信息使用–silent 选项。1 . curl URL --silent 这条命令是将下载文件输出到终端,所有下载的数据都被写入到stdout。2 . curl URL --silent -O 使用选项 -O 将下载的数据写入到文件,必须使用文件的绝对地址。_curl download

推荐文章

热门文章

相关标签