Object中的方法:

178 阅读4分钟

方法1:assign: 浅克隆

  • 作用: 用于将一个对象中可遍历的属性复制到另一个目标对象中,返回目标对象
  • 语法: var 新目标对象 = object.assign(原目标对象,被复制的对象)

方法2: creat:

  • 作用: 创建对象
  • 语法: Object.create(原型, 设置属性的对象) - 返回对象;
   var o = Object.create(null);
   console.log(o);
   
   1.对象可以没有原型;
   2.创建对象应该增加一个步骤 - 设置原型
   
   new操作符到底干了什么?
    1.在构造函数中创建了空对象
    2.给他设置原型对象
    3.this指向他
    4.执行构造函数代码
    5.返回这个空对象
   

方法3: defineProperty

  • 作用: 监视对象属性,当对象属性的值被修改时,可以监视到,访问对象属性的值的时候,可以监视到;
  • 语法:
Object.defineProperty(对象, 属性名, {
    get() {
        // 当访问对象的这个属性的时候会先触发这个函数
    }
  var obj ={
    name:"张三",
    age:12
  }
  监视对象访问name属性:
  Object.defineProperty(obj, 'name',{
    get(){
      console.log('访问了name属性');
      // get方法返回的值,就是被访问到的值
    },
     // 当设置对象的属性的值的时候会先执行set方法
    set(val){// set参数表示将要修改的值是多少
      console.log('正在设置name属性的值,要修改成' + val);
    }
  }

三阶段: 双向数据绑定:
       改变页面内容 - 对象的值就改变
       对象的值改变了 - 页面内容改变

<input type="text">
// 实现双向绑定
// 改变input中的内容让obj.msg也改变
var ipt = document.querySelector('input')
ipt.oninput = function() {
    obj.msg = this.value
}
// 改变数据让页面改变 - 监听数据改变
Object.defineProperty(obj, 'msg', {
    get() {
        return ipt.value
    },
    set(val) { // 将要改变的值
        ipt.value = val
    }
})

方法4: entries:

  • 作用: 将对象中可遍历的键值对组成map格式的一个数组;
  • 语法: Object.entries(对象)
  • 返回值: 返回新的数组

方法5: fromEntries:

  • 作用: 将键值对组成的数组转成对象=>相当与把Map转化成对象;
  • 语法: Object.fromEntries(数组)
  • 返回值: 返回一个对象;
var arr = [['name', '张三'], ['age', 12], ['sex', '男']];
返回值:
     var arr= {
       name: "张三",
       age:18,
       sex:男
     }

方法6: freeze:

  • 作用: 将一个对象冻结;让对象不能新增,不能删除,不用修改原型,不能改属性的特性
  • 语法: var 对象 = Object.freeze(对象)
  • 返回值: 返回被冻结的对象;
默认可添加、可删除、修改原型
将obj冻结 - 不可以添加、删除、修改原型

方法7: isFrozen:

  • 作用: 判断对象是否被冻结
  • 语法: Object.isFrozen(对象)
  • 返回值: 返回一个布尔值;
Object.freeze(obj)
console.log( Object.isFrozen(obj) ); //判断obj是否被冻结
console.log( Object.isFrozen(obj) ); // true 已经被绑定

方法8: getOwnPropertyDescriptors:

  • 作用: 获取对象属性的描述符;可以理解为获取它可遍历 可删除的那些属性
  • 语法: Object.getOwnPropertyDescriptors(对象)
  • 返回值: 返回描述符;
  var descriptors = Object.getOwnPropertyDescriptors(obj);
  console.log(descriptors);

方法9: getPrototypeOf:

  • 作用: 获取对象原型的方法;
  • 语法: Object.getPrototypeOf(对象)
  • 返回值: 返回原型对象;
var obj ={
     name:"张三"
}
// 获取obj的原型
console.log( Object.getPrototypeOf(obj) );

方法10: hasOwn

  • 作用: 判断一个属性是否属于某个对象,而不是被继承来的,跟hasOwnProperty功能一样;
  • 语法: Object.hasOwn(对象, 属性)
  • 返回值: 返回布尔值

方法11: is

  • 作用: 判断两个数据表面看起来是否相等
  • 语法: Object.is(两个数据)
  • 返回值: 表面相等时是true 表面不相等是false
console.log( +0 == -0 );//true
console.log( Object.is(+0, -0) ); //false

console.log( NaN == NaN );//false
console.log( Object.is(NaN, NaN) );//true

方法12: preventExtensions

  • 作用: 将一个对象变得不可扩展(添加属性)
  • 语法: Object.preventExtension(对象) //此时这个对象就不可以添加属性了.
  • 返回值: 没有扩展之前的原对象;
  • 注意: 它只是不能加东西,可以删除 可以修改...

方法13: isExtensible:

  • 作用: 判断一个对象是否可扩展
  • 语法: Object.isExtensible(对象)
  • 返回值: 返回布尔值

方法14: keys:

  • 作用: 将对象所有键组成一个数组
  • 语法: Object.keys(对象)
  • 返回值: 返回新数组;
var obj = {
    name: '张三',
    age: 12,
    isMan: true
}
var arr = Object.keys(obj)
console.log(arr); //["name","age","isMan"]

方法15: values

  • 作用: 将对象中所有的值组成一个数组
  • 语法: Object.values(对象)
  • 返回值: 返回值组成的数组
var obj = {
    name: '张三',
    age: 12,
    isMan: true
}
var obj = Object.values(obj);
console.log(obj); //["张三","12","true"]

方法16: setPrototypeOf:

  • 作用: 给对象设置原型
  • 语法: Object.setPrototypeOf(对象, 原型)
  • 返回值: 设置后的原型

方法17: seal:

  • 作用: 封闭一个对象(不能添加、删除,但能修改)
  • 语法: Object.seal(对象)
  • **返回值: **
  • 冻结freeze 和封闭seal的区别:
  • 封闭不能添加属性 不能删除属性 但可以修改属性;
  • 冻结不可以添加,不可以删除 不可以修改
var obj = {
    name: '张三'
}

Object.seal(obj) //封闭这个对象
obj.age = 12 //不可以添加
delete obj.name//不可以删除
obj.name = '李四' //封闭可以修改
console.log(obj);