美文网首页
对象的相关概念和方法

对象的相关概念和方法

作者: 练习时长2年半的个人练习生 | 来源:发表于2020-06-26 22:07 被阅读0次
对象的概念

因为js中没有真正类的概念. js的实例对象都是通过函数的构造函数调用生成的(new), 对象和对象 通过[[prototype]]建立联系.在js里函数本身也是对象.

对象的属性名必须是字符串类型.如果不是字符串类型会自动转为字符串类型. obj.key 和obj[key] 的区别是 obj[key] 可以加入计算属性

  • 可枚举性:属性是否可以在for in 中遍历到
  1. 声明对象的两种方式
  Object.defineProperty(对象,属性名称,{
  //具体描述
          value:'',//初始值
          writable:'',//是否可写入,
          set(val){  //设置值时可做数据劫持
          },
          get(){//访问属性时调用.
          },
          enumerable:  //是否可枚举
  }

注意set 和get 同时出现,但是不能和 value writable同时出现.

 let obj1 = {
      name: '李明',
      age: 19
  }
  let obj2 = new Object()
  Object.defineProperty(obj2, 'name', {
      //    value:'德玛西亚',
      get: () => {
          return this.value
      },
      set: (val) => {
          this.value = val
      },
      enumerable: true
  })
  • 常用的方法
    1. for in 遍历对象本身和对象本身及整条原型链上可枚举类型的属性
    let grandParent = {
        age: 113
    }
    let parent = Object.create(grandParent)
    parent.name = 'parent'
    var son = Object.create(parent)
    son.hobby='boxing'
    for (let key in son) {
        console.log(key)
    }
    // hobby  name  age
  1. Object.keys(obj) 获取对象本身可枚举类型属性数组.
    let grandParent = {
        age: 113
    }
    let parent = Object.create(grandParent)
    parent.name = 'parent'
    var son = Object.create(parent)
    son.hobby='boxing'
   console.log(Object.keys(son)) //['hobby']
    • 判断对象本身是否拥有某个属性obj.hasOwnProperty(key)
    • (key in obj) 判断对象本身及整条原型链上是否拥有某个属性.
  let obj1 = {
      name: '李明',
      age: 19
  }
  console.log(obj1.hasOwnProperty('age')) //true
let grandParent = {
      age: 113
  }
  let parent = Object.create(grandParent)
  parent.name = 'parent'
  var son = Object.create(parent)
  son.hobby='boxing'
  console.log('age' in son)  //true
    1. Object.assign(target, ...sources) 将一个或多个对象的可枚举类型属性合并到target对象并返回 一个新的对象
    let obj = Object.assign({sex:'男'},obj1,{code:'no.1'});
    console.log(obj)//{sex: "男", name: "李明", age: 19, code: "no.1"}
  • 5.Object.create(obj)方法创建一个新对象,使用现有的对象来提供新创建的对象的proto。大白话就是创建一个新的空对象,把新对象的____proto__指向obj 将这个新对象返回
  let obj ={
       name:'abc',
  }
  let obj2 = Object.create(obj)
  console.log(obj2.__proto__ === obj)//true

设置对象属性受哪些因素影响?

  1. 如果这个属性在对象本身 .且不是只读属性,直接在本对象上修改成功
  2. 如果这个属性不在对象本身,而在原型链上层或更往上, 且这个属性是可写的.那么直接在对象本身,新增一个同名属性.
    3 . 如果这个属性不在对象本身,而在原型链上层或更网上,且这个属性是只读的.那么.直接忽略掉这个设置操作.本身及以上都不会设置这个属性.
let parent = {}
  Object.defineProperty(parent,'name',{
      value:'parent',
      writable:false
  })

  let son = Object.create(parent)
  son.name = 'son'
  console.log(son)
// 输出结果可以看到 son 依然是空对象.他的__proto__上的name 依然是parent
let parent = {}
  Object.defineProperty(parent,'name',{
      value:'parent',
      writable:true
  })

  let son = Object.create(parent)
  son.name = 'son'
  console.log(son)
// 输出结果可以看到 son{name:'son'}.他的__proto__上的name 依然是parent
比较两个对象

两个对象通过== ===进行比较 .实际上比较的是内存的位置是否一样,而不是像基本类型那样比较值是否相等

     let a = {
         name:'jack'
     }

     let b = {
         name:'jack'
     }
     let c = b
     console.log(a === b) //false
     console.log(a == b) //false
     console.log(c == b)  //true

相关文章

  • 对象的相关概念和方法

    对象的概念 因为js中没有真正类的概念. js的实例对象都是通过函数的构造函数调用生成的(new), 对象和对象...

  • js对象

    5 - 对象 5.1 对象的相关概念 什么是对象?在 JavaScript 中,对象是一组无序的相关属性和方法的集...

  • 10.JavaScript对象(创建对象的三种方式(使用字面量创

    1 - 对象 1.1 对象的相关概念 什么是对象?在 JavaScript 中,对象是一组无序的相关属性和方法的集...

  • 【前端】08 - JavaScript基础-对象

    1. 对象的相关概念 1.1 什么是对象? 在 JavaScript 中,对象是一组无序的相关属性和方法的集合,...

  • JavaScript-对象、数据类型

    1 - 对象 1.1 对象的相关概念 ① 什么是对象? 在 JavaScript 中,对象是一组无序的相关属性和方...

  • Python学习笔记5

    面向对象 类和对象的创建 属相相关 方法相关 元类 内置的特殊属性 内置的特殊方法 面向对象 类和对象的创建 类 ...

  • JavaScript高级

    1 面向对象操作 - 回顾对象的基本概念 - 面向对象的相关概念 - 面向对象的特征和操作的实现方式 - 小练习 ...

  • Python3 & 类的继承

    Python 是一门面向对象的语言。以下简单介绍面向对象相关概念:类:描述具有相同属性和方法的集合。简单来说就是一...

  • Go语言入门总结(五)- 结构、接口

    结构、接口 go语言里没有类的概念,也不支持继承。但是,通过组合结构和方法,就可以实现面向对象设计的相关概念。 1...

  • 再和“面向对象”谈恋爱 - 图片预加载组件(七)

    再和“面向对象”谈恋爱 - 对象简介(一)再和“面向对象”谈恋爱 - 对象相关概念(二)再和“面向对象”谈恋爱 -...

网友评论

      本文标题:对象的相关概念和方法

      本文链接:https://www.haomeiwen.com/subject/fkaufktx.html