最新发现:Object.defineProperty()让数组的length属性变成只读

将属性添加到对象, 或修改现有属性的特性---MSDN的解释.

语法

object.defineProperty(object, propertyname, descriptor)

object: 必须. 要修改的属性的对象.

propertyname : 必须. 属性名称.

descriptor: 必须. 属性描述符. 他可以针对数据属性或访问器属性.

返回值: 已修改的对象.

可以使用object.defineProperty()执行以下操作:

1.向对象添加新属性. 当对象不具有指定的属性名称时, 发生此操作.

2.修改现有属性的特性. 当对象已具有指定的属性名称时, 发生此操作.

修改数据属性

1     var b = [1, 2, 3];
2     Object.defineProperty(b, "length", {writable: false}); //让length变成可读属性
3     b.length = 0;
4     console.log(b.length);

添加数据属性

 1     var newLine = "<br/>";
 2     var obj = {};
 3     Object.defineProperty(obj, "newDataProperty", {
 4         value:101,
 5         writable:true,
 6         enumerable:true,
 7         configurable:true
 8     });
 9     obj.newDataProperty = 102;
10     document.write("Property value: " + obj.newDataProperty + newLine);
时间: 2024-10-07 06:33:11

最新发现:Object.defineProperty()让数组的length属性变成只读的相关文章

数组的length属性不是只读的,你知道吗?

数组的length属性不是只读的 var color=['red','blue','green']; color.length=2; console.log(color); // ["red", "blue"]

数组的Length属性用起来比把长度放在一个局部变量高效

在clr via C#一书中看到了下面文字,数组的Length属性,经过了特殊处理,在循环的时候,直接是用该属性比,把长度放在局部标量中高效. 所以,对于程序中的效率问题,很多时候不能只能想当然的以为这样就高效,需要自己去实际的实践,也许结果是自己意想不到的.

Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象。

Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. 语法EDIT Object.defineProperty(obj, prop, descriptor) 参数 obj 需要定义属性的对象. prop 需定义或修改的属性的名字. descriptor 将被定义或修改的属性的描述符. 返回值 返回传入函数的对象,即第一个参数obj 描述EDIT 该方法允许精确添加或修改对象的属性.一般情况下,我们为对象添加属性是通过

深入理解 Object.defineProperty

Object.defineProperty() 和 Proxy 对象,都可以用来对数据的劫持操作.何为数据劫持呢?就是在我们访问或者修改某个对象的某个属性的时候,通过一段代码进行拦截行为,然后进行额外的操作,然后返回结果.那么vue中双向数据绑定就是一个典型的应用. Vue2.x 是使用 Object.defindProperty(),来进行对对象的监听的.Vue3.x 版本之后就改用Proxy进行实现的.下面我们先来理解下Object.defineProperty作用. 一: 理解Object

JavaScript使用Object.defineProperty方法实现双数据绑定

Object.defineProperty这个方法非常值得学习,很多mvc框架中的双向数据绑定就是通过它来实现的. 本着互联网分享精神,今天我就将我自己的见解分享给大家,希望能有所帮助. 开始使用 Object.defineProperty接收三个参数 *  目标对象 *  需要要定义的属性名或方法的名字 *  目标属性所拥有的特性 - descriptor (之后讲解下面案例不包括) 代码实例 var User = {}; Object.defineProperty(User, 'info',

善用Object.defineProperty巧妙找到修改某个变量的准确代码位置

我今天的工作又遇到一个难题.前端UI右下角这个按钮被设置为"禁用(disabled)"状态. 这个按钮的可用状态由属性enabled控制.我通过调试发现,一旦下图第88行代码执行完毕之后,这个按钮的属性mProperties里就多出一个enabled:false的属性. 而88行执行之前,还没有这个enabled:false的属性.正是这个属性让按钮进入了禁用状态. 我单步调试setModel函数,花了半个小时的时间也没能找到这个enabled属性到底是在哪一行代码加进去的. 于是我只

学习 vue2.0/3.0 中的proxy和Object.defineProperty 小记

vue3.0将双向数据绑定的主要方法从Object.defineProperty舍弃,使用了proxy的方式通过观察者模式实现相关的数据变化监听,总的来说是一个很好地前进.今天简单的实验了一下相关的实现和不同情况下的使用输出.简单记录一下吧.同时说明代码中是使用数组的例子进行区分的. 个人认为proxy的实现方式要比Object.defineProperty优雅很多,Object.defineProperty首先是指数据劫持,实际上proxy的运行是后置于Object.definePropert

浅谈js对象之数据属性、访问器属性、Object.defineProperty方法

一.对象 这个不用多说,常见的几种创建对象的方法有: 1.通过构造函数创建对象,如下所示: function Person(){ } var person = new Person(); 2.通过Object创建简单对象,例如: var obj = new Object(); 3.通过字面量创建对象. var obj = {}; 常用的一般是第一种和第三种方法. 二.属性类型 javascript中有两种属性:数据属性和访问器属性,确切的说这两种特性是用来描述对象属性的各种特征,比如说这个对象属

数组①数组遍历与属性

虽然在 JavaScript 中数组是对象,但是没有好的理由去使用 for in 循环 遍历数组. 相反,有一些好的理由不去使用 for in 遍历数组. 注意: JavaScript 中数组不是关联数组. JavaScript 中只有对象 来管理键值的对应关系.但是关联数组是保持顺序的,而对象不是. 由于 for in 循环会枚举原型链上的所有属性,唯一过滤这些属性的方式是使用 hasOwnProperty 函数, 因此会比普通的 for 循环慢上好多倍. 遍历 为了达到遍历数组的最佳性能,推