自己封装一个Object.freeze()方法】的更多相关文章

1.遍历所有属性和方法 2.修改遍历到的属性的描述 3.Object.seal() Object.defineProperty(Object,'freezePolyfill',{ value:function(obj){ var i; //遍历属性和方法 for(i in obj){ if(obj.hasOwnProperty(i)){ Object.defineProperty(obj,i,{ //修改遍历到的属性 writable:false }); } } Object.seal(obj)…
Object.freeze() 方法可以冻结一个对象.一个被冻结的对象再也不能被修改: 冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性.可配置性.可写性,以及不能修改已有属性的值. 此外,冻结一个对象后该对象的原型也不能被修改.freeze() 返回和传入的参数相同的对象. const obj = { property: 42 }; const obj2 = Object.freeze(obj); obj.property = 33; // Thr…
Object.create()会将参数对象作为一个新创建的空对象的原型, 并返回这个空对象, 基于这个功能, 就有了下面这个Object.create()的手动实现: function _create(obj){ function C(){} C.prototype = obj; return new C(); } var obj1 = {name: "Lilei"}; var lilei = _create(obj1); lilei; // {} lilei.name; // &qu…
将对象冻结,使用Object.freeze方法 const foo = Object.freeze({}); // 常规模式时,下面一行不起作用: // 严格模式时,该行会报错 foo.prop = 123; var t = { a:{ t:2 } } //冻结t对象下属性a Object.freeze(t) t.a.t = 3 //不能冻结属性a下的值obj中的对象 console.log(t.a.t) 除了将对象本身冻结,对象的属性也应该冻结.下面是一个将对象彻底冻结的函数. var con…
Object.freeze() 方法可以冻结一个对象.一个被冻结的对象再也不能被修改:冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性.可配置性.可写性,以及不能修改已有属性的值.此外,冻结一个对象后该对象的原型也不能被修改.freeze() 返回和传入的参数相同的对象. const obj = { prop: 42 }; Object.freeze(obj); obj.prop = 33; // Throws an error in strict…
阅读:Object 1.obj的"." 或 "[]"方法 读取对象的属性或方法 对象属性的读取:ES6中被Proxy的get(target, propKey, receiver)拦截 2.obj.key = value 或 obj[key] = value 设置对象的属性的方法 对象属性的设置:ES6中被Proxy的set(target, propKey, value, receiver)拦截,返回一个boolean值 call().apply().bind() /…
前言 最近参加若川的源码共度活动,第 24 期 vue2 源码工具函数,最开始: var emptyObject = Object.freeze({}); 之前知道 Object.freeze() 是冻结,可是具体是什么呢,错过了就错过了,要不看看吧,那就看看吧,嗯,我这种读源码的方式比较低效,但是还是得看看,不然后面的都不易于理解,就暂且打打基础. 然后就看了MDN Web Docs Object.freeze() Object.freeze() Try it Object.freeze()…
Object.freeze方法比Object.seal方法更严格,不仅不能扩展新对象和不可重新配置属性的特性,还不能改变对象属性的值writable(不可写)…
ES6中对象的扩展里面添加了一个Object.is方法,用于比较两个值是否严格相等.内部计算与 === 行为基本一致.那么我们怎么在不支持这个方法的ES5中实现呢? 首先我们需要搞清楚两点,1:Object.is(+0,-0) // false 2:Object.is(NaN, NaN) // true. 好了那么让我们自己写出这个方法吧,代码如下: (function() { Object.defineProperty(Object,'is', { value: function(value1…
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. 语法EDIT Object.defineProperty(obj, prop, descriptor) 参数 obj 需要定义属性的对象. prop 需定义或修改的属性的名字. descriptor 将被定义或修改的属性的描述符. 返回值 返回传入函数的对象,即第一个参数obj 描述EDIT 该方法允许精确添加或修改对象的属性.一般情况下,我们为对象添加属性是通过…