Object.defineProperty 设置属性
时间: 2024-01-05 08:13:38 浏览: 20
Object.defineProperty 方法用于定义或修改对象的属性。该方法接收三个参数:属性所在的对象、属性的名字、和一个描述符对象。描述符对象的属性必须是:configurable、enumerable、writable 和 value。可以根据需要设置其中一个或多个值。例如,可以使用 Object.defineProperty 方法将一个属性设置为不可写:
```javascript
var person = {};
Object.defineProperty(person, "name", {
writable: false,
value: "andy"
});
```
上述代码中,将 person 对象的 name 属性设置为不可写,即无法通过赋值操作修改其值。因此,尝试修改属性值会无效。例如:
```javascript
alert(person.name); // andy
person.name = "Grey"; // 尝试修改属性值,无效
alert(person.name); // andy,不可修改的属性
```
注意,在非严格模式下,如果不指定特性的值,默认情况下 configurable、enumerable 和 writable 特性的值都是 false。而在严格模式下,对未指定特性值的 Object.defineProperty 方法调用会被忽略,对于已经设置了 configurable 为 false 的属性,再次调用 Object.defineProperty 方法去设置属性特性会报错。
相关问题
Object.defineProperty
Object.defineProperty是一个用来在一个对象上定义新属性或者修改已存在属性的方法。[2]它可以通过设置属性的描述符来控制属性的行为,包括属性的可枚举性、可配置性、可写性以及属性的值等。通过使用Object.defineProperty,我们可以实现对对象属性的监听和控制,从而实现双向数据绑定。
举个简单的例子,假设我们有一个名为person的对象,其中包含name和age两个属性,我们可以通过使用Object.defineProperty来添加一个新的属性sex,并设置它的值为男。代码如下:
let person = { name:"码农", age: 18 }
Object.defineProperty(person,'sex',{ value:"男" })
console.log(person)
运行以上代码,我们可以在控制台中看到person对象中已经添加了一个名为sex的属性,其值为男。这就是Object.defineProperty的基本用法。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [vue源码学习之Object.defineProperty对象属性监听](https://download.csdn.net/download/weixin_38663151/14904644)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [Object.defineproperty方法(详解)](https://blog.csdn.net/weixin_57677300/article/details/126278467)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
Object.defineProperty数据劫持
Object.defineProperty是JavaScript中的一个方法,用于在对象上定义新属性或修改现有属性的特性。数据劫持是指在对象上进行属性访问和修改的过程中,通过重新定义属性的get和set方法,对数据进行拦截和处理。
当使用Object.defineProperty方法定义属性时,可以指定属性的特性,包括可枚举性、可写性、可配置性和值等。同时也可以通过指定get和set方法来实现数据劫持。
例如,我们可以使用Object.defineProperty方法对一个对象进行数据劫持,以实现属性访问拦截:
```javascript
const obj = {};
Object.defineProperty(obj, 'name', {
get() {
console.log('访问name属性');
return this._name;
},
set(value) {
console.log('设置name属性');
this._name = value;
}
});
obj.name = 'John';
console.log(obj.name);
```
在上述代码中,我们通过Object.defineProperty方法对obj对象的name属性进行了定义,并指定了get和set函数。当我们对name属性进行赋值时,会触发set函数,并输出设置name属性的日志。当我们对name属性进行访问时,会触发get函数,并输出访问name属性的日志。
通过使用Object.defineProperty方法进行数据劫持,我们可以在属性访问和修改时执行自定义的逻辑,从而实现一些高级的功能,比如数据绑定、事件触发等。