proxy与object

本文详细介绍了JavaScript中的Object属性与方法,包括Object.prototype.constructor、Object.assign()、Object.create()等,以及Proxy处理程序的使用,如访问控制、属性定义等。同时,解释了各种方法在对象操作中的作用,如Object.is()用于判断值是否相等,Object.freeze()用于冻结对象,阻止进一步修改。
摘要由CSDN通过智能技术生成
const handler = {
   
  defineProperty(target, prop, descriptor) {
   
    console.log('trigger defineProperty')
    return Reflect.defineProperty(target, prop, descriptor)
  },
  deleteProperty(target, prop) {
   
    console.log('trigger deleteProperty')
    return Reflect.deleteProperty(target, prop)
  },
  set(target, prop, value, receiver) {
   
    console.log('trigger setter & prop => ', prop)
    return Reflect.get(target, prop, value, receiver)
  },
  get(target, prop, receiver) {
   
    console.log('trigger getter & prop => ',  prop)
    return Reflect.get(target, prop, receiver)
  },
  has(target, prop) {
   
    console.log('trigger has')
    return Reflect.has(target, prop)
  },
  ownKeys(target) {
   
    console.log('trigger ownKeys')
    return Reflect.ownKeys(target)
  },
  getOwnPropertyDescriptor(target, prop) {
   
    console.log('trigger getOwnPropertyDescriptor & prop => ', prop)
    return Reflect.getOwnPropertyDescriptor(target, prop)
  },

  setPrototypeOf(target, prototype) {
   
    console.log('trigger setPrototypeOf')
    return Reflect.setPrototypeOf(target, prototype)
  },
  getPrototypeOf(target) {
   
    console.log('trigger getPrototypeOf')
    return Reflect.getPrototypeOf(target)
  },

  preventExtensions(target) {
   
    console.log('trigger preventExtensions')
    return Reflect.preventExtensions(target)
  },
  isExtensible(target) {
   
    console.log('trigger isExtensible')
    return Reflect.isExtensible(target)
  },

  apply(target, thisArg, argumentsList) {
   
    console.log('trigger apply')
    return Reflect.apply(target, thisArg, argumentsList)
  },
  construct(target, argumentsList, newTarget) {
   
    // console.log(newTarget === proxy)
    console.log('trigger construct')
    return Reflect.construct(target, argumentsList, newTarget)
  }
}

Object 属性与方法

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object

Proxy 处理程序

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/construct

属性

Object.prototype.constructor

const foo = function() {
   
  return 1 + 1
}
const proxy = new Proxy(foo, handler)
console.log(proxy.constructor)

// trigger getter & prop =>  constructor
// [Function: Function]

方法

Object.assign()

const prototype = {
    num: 11 }
const foo = Object.create(prototype)
foo.id = 'foo'
const symbol = Symbol(foo)
Object.defineProperties(foo, {
   
  'age': {
   
    value: 19,
    enumerable: false,
    configurable: true,
    writable: true
  },
  'sex': {
   
    get: function() {
   
      return 'man'
    },
    set() {
   },
    enumerable: true,
    configurable: true
  },
  [symbol]: {
   
    value: 'symbol-value',
    writable: true,
    enumerable: true,
    configurable: true
  }
})

const proxy = new
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值