你什么时候使用Object.defineProperty() [英] when do you use Object.defineProperty()

查看:119
本文介绍了你什么时候使用Object.defineProperty()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道何时应该使用

Object.defineProperty

为对象创建新属性。我知道我可以设置类似

to create new properties for an object. I'm aware that I'm able to set things like

enumerable: false

但你什么时候需要这个呢?如果你只是设置一个属性,如

but when do you need this really? If you just set a property like

myObject.myprop = 5;

它的描述符都设置为true,对吧?当你们使用相当冗长的.defineProperty()调用以及出于什么原因时,我实际上更好奇。

its descriptors are all set to true, right? I'm actually more curious when you guys use that rather verbose call to .defineProperty() and for what reasons.

推荐答案

< a href =https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty> Object.defineProperty 主要用于设置具有特定属性描述符的属性(例如只读(常量),可枚举性(不显示 for(.. in ..) loop,getters,setters)。

Object.defineProperty is mainly used to set properties with specific property descriptors (e.g. read-only (constants), enumerability (to not show a property in a for (.. in ..) loop, getters, setters).

"use strict";
var myObj = {}; // Create object
// Set property (+descriptor)
Object.defineProperty(myObj, 'myprop', {
    value: 5,
    writable: false
});
console.log(myObj.myprop);// 5
myObj.myprop = 1;         // In strict mode: TypeError: myObj.myprop is read-only



示例



此方法使用属性扩展 Object 原型。仅定义了getter,并且可枚举性设置为 false

Example

This method extends the Object prototype with a property. Only the getter is defined, and the enumerability is set to false.

Object.defineProperty(Object.prototype, '__CLASS__', {
    get: function() {
        return Object.prototype.toString.call(this);
    },
    enumerable: false // = Default
});
Object.keys({});           // []
console.log([].__CLASS__); // "[object Array]"

这篇关于你什么时候使用Object.defineProperty()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆