首页 > Vue >

js如何自定义只读变量或者对象属性

时间: 作者:admin 浏览:

做了这么久大前端,突然想自定义一个只读变量(对象)用来做初始值,竟然想不起怎么做,因为不想被vue的双向绑定在赋值的时候被同步修改了;因此为了保证定义的这个变量是不能被修改的,小编找了比较多的资料,总结如下:

1、 Object.freeze(obj);

描述:被冻结对象自身的所有属性都不可能以任何方式被修改。任何修改尝试都会失败,无论是静默地还是通过抛出TypeError异常(最常见但不仅限于strict mode)。

这个是小编找到的最简单直接的了,看描述就知道一旦定义了就只能原封不动,不能修改删除;

//控制台操作
let b = Object.freeze({a:1});
console.log(b) //{a: 1}
b.a = 2
console.log(b.a)//1

2、Object.defineProperties(obj, props)与Object.defineProperty(obj, prop, descriptor)

描述:方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象。
Object.defineProperties可以定义多个只读属性,Object.defineProperty只能定义一个;

//定义c对象的多个属性(可设置读写权限),注意写法
let c = Object.defineProperties({}, {
  'a': {
    value: "可修改",
    writable: true
  },
  'b': {
    value: '只读',
    writable: false
  }
});
c.a = 2
console.log(c.a)//2

c.b = 2
console.log(c.b)//'只读'

//定义c对象的一个a只读属性
let c = Object.defineProperty({},"a", {
    value: 1
    writable: false
});
c.a = 2
console.log(c.a)//1

3、闭包

描述:最不想说的一个,因为闭包是最难理解的,写法也很繁杂;

let c = (function(){
    let a = 1
    return function(){
        return a
    }
})()
console.log(c())//1
微信公众号
微信公众号:
  • 前端全栈之路(微信群)
前端QQ交流群
前端QQ交流群:
  • 794324979
  • 734802480(已满)

更多文章

栏目文章


Copyright © 2014-2023 seozhijia.net 版权所有-粤ICP备13087626号-4