Analysis of Object.defineProperty() method in JavaScript
This article introduces to you the analysis of the Object.defineProperty() method in JavaScript. It has certain reference value. Friends in need can refer to it.
=With Object.defineProperty
There are two different ways to add or modify properties for JavaScript objects: Direct use = assignment or Use Object.defineProperty ()definition. As follows:
// 示例1 var obj = {}; // 直接使用=赋值 obj.a = 1; // 使用Object.defineProperty定义 Object.defineProperty(obj, "b", { value: 2 }); console.log(obj) // 打印"{a: 1, b: 2}"
Looking at it this way, there seems to be no difference between the two, right? However, if you use Object.getOwnPropertyDescriptor() to view the descriptor (property descriptor) of the properties of obj.a and obj.b, you will find that = is not the same as Object.defineProperty:
// 示例2 var obj = {}; obj.a = 1; Object.defineProperty(obj, "b", { value: 2 }); console.log(Object.getOwnPropertyDescriptor(obj, "a")); // 打印"{value: 1, writable: true, enumerable: true, configurable: true}" console.log(Object.getOwnPropertyDescriptor(obj, "b")); // 打印"{value: 2, writable: false, enumerable: false, configurable: false}"
It can be seen that when using = assignment, the attribute descriptor value of the attribute can be modified, and writable, enumerable and configurable are all true.
The default value of the property descriptors writable, enumerable and configurable of properties defined using Object.defineProperty() is false, but they can all be modified. As for the meaning of writable, enumerable and configurable, it is not difficult to guess from the name, which will be introduced in detail later.
Using = assignment is equivalent to setting writable, enumerable and configurable to true when defining using Object.defineProperty(). Code examples 3 and 4 are equivalent:
// 示例3 var obj = {}; obj.name = "Fundebug"; console.log(Object.getOwnPropertyDescriptor(obj, "name")); // 打印{value: "Fundebug", writable: true, enumerable: true, configurable: true}
// 示例4 var obj = {}; Object.defineProperty(obj, "name", { value: "Fundebug", writable: true, enumerable: true, configurable: true }); console.log(Object.getOwnPropertyDescriptor(obj, "name")); // 打印{value: "Fundebug", writable: true, enumerable: true, configurable: true}
Object.defineProperty()
If you only define value when using Object.defineProperty(), the default values of writable, enumerable and configurable are false. Code examples 5 and 6 are equivalent:
// 示例5 var obj = {}; Object.defineProperty(obj, "name", { value: "Fundebug" }); console.log(Object.getOwnPropertyDescriptor(obj, "name")); // 打印{value: "Fundebug", writable: false, enumerable: false, configurable: false}
// 示例6 var obj = {}; Object.defineProperty(obj, "name", { value: "Fundebug", writable: false, enumerable: false, configurable: false }); console.log(Object.getOwnPropertyDescriptor(obj, "name")); // 打印{value: "Fundebug", writable: false, enumerable: false, configurable: false}
Since writable, enumerable and configurable are all false, the obj.name attribute cannot be assigned, traversed and deleted:
// 示例7 var obj = {}; Object.defineProperty(obj, "name", { value: "Fundebug" }); // writable为false,无法赋值 obj.name = "云麒"; console.log(obj.name); // 打印"Fundebug" // enumerable为false,无法遍历 console.log(Object.keys(obj)); // 打印"[]" // configurable为false,无法删除 delete obj.name; console.log(obj.name); // 打印"Fundebug"
If in In strict mode ("use strict"), the code in Example 7 will report an error, which can be seen below.
writable
When writable is false, the property cannot be assigned again, and an error will be reported in strict mode"Cannot assign to read only property"(If you want to real-time If you want to monitor similar application errors, you are welcome to try Fundebug for free. We support front-end web pages, WeChat mini programs, WeChat mini games, Node.js and Java error monitoring! ):
// 示例8 "use strict" var obj = {}; Object.defineProperty(obj, "name", { value: "Fundebug", writable: false, enumerable: true, configurable: true }); obj.name = "云麒"; // 报错“Uncaught TypeError: Cannot assign to read only property 'name' of object '#<Object>'”
When writable is true, Attributes can be assigned values. Readers may wish to test this by themselves.
enumerable
When enumerable is false, the properties cannot be traversed:
// 示例9 "use strict" var obj = {}; Object.defineProperty(obj, "name", { value: "Fundebug", writable: true, enumerable: false, configurable: true }); console.log(Object.keys(obj)) // 打印"[]"
When enumerable is true, the properties can be traversed. Readers may wish to test this by themselves.
configurable
When enumerable is false, the property cannot be deleted, and an error will be reported in strict mode "Cannot delete property" :
// 示例10 "use strict" var obj = {}; Object.defineProperty(obj, "name", { value: "Fundebug", writable: true, enumerable: true, configurable: false }); delete obj.name // 报错“Uncaught TypeError: Cannot delete property 'name' of #<Object>”
When enumerable is true , attributes can be deleted, readers may wish to test this by themselves.
writable and configurable
When writable and enumerable are false at the same time, the property cannot be redefined using Object.defineProperty(), and an error will be reported in strict mode "Cannot redefine property":
// 示例11 "use strict" var obj = {}; Object.defineProperty(obj, "name", { value: "Fundebug", writable: false, configurable: false }) Object.defineProperty(obj, "name", { value: "云麒" }) // 报错“Uncaught TypeError: Cannot redefine property: name”
When writable or enumerable is true, the property can be redefined using Object.defineProperty(). Readers may wish to test this by themselves.
All code examples in this article were tested on Chrome 67.
Related recommendations:
Expansion of classes in js and analysis of object-oriented technology
angularjs about page template clearing Instructions
The above is the detailed content of Analysis of Object.defineProperty() method in JavaScript. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

How to use WebSocket and JavaScript to implement an online speech recognition system Introduction: With the continuous development of technology, speech recognition technology has become an important part of the field of artificial intelligence. The online speech recognition system based on WebSocket and JavaScript has the characteristics of low latency, real-time and cross-platform, and has become a widely used solution. This article will introduce how to use WebSocket and JavaScript to implement an online speech recognition system.

WebSocket and JavaScript: Key technologies for realizing real-time monitoring systems Introduction: With the rapid development of Internet technology, real-time monitoring systems have been widely used in various fields. One of the key technologies to achieve real-time monitoring is the combination of WebSocket and JavaScript. This article will introduce the application of WebSocket and JavaScript in real-time monitoring systems, give code examples, and explain their implementation principles in detail. 1. WebSocket technology

Introduction to how to use JavaScript and WebSocket to implement a real-time online ordering system: With the popularity of the Internet and the advancement of technology, more and more restaurants have begun to provide online ordering services. In order to implement a real-time online ordering system, we can use JavaScript and WebSocket technology. WebSocket is a full-duplex communication protocol based on the TCP protocol, which can realize real-time two-way communication between the client and the server. In the real-time online ordering system, when the user selects dishes and places an order

How to use WebSocket and JavaScript to implement an online reservation system. In today's digital era, more and more businesses and services need to provide online reservation functions. It is crucial to implement an efficient and real-time online reservation system. This article will introduce how to use WebSocket and JavaScript to implement an online reservation system, and provide specific code examples. 1. What is WebSocket? WebSocket is a full-duplex method on a single TCP connection.

JavaScript and WebSocket: Building an efficient real-time weather forecast system Introduction: Today, the accuracy of weather forecasts is of great significance to daily life and decision-making. As technology develops, we can provide more accurate and reliable weather forecasts by obtaining weather data in real time. In this article, we will learn how to use JavaScript and WebSocket technology to build an efficient real-time weather forecast system. This article will demonstrate the implementation process through specific code examples. We

JavaScript tutorial: How to get HTTP status code, specific code examples are required. Preface: In web development, data interaction with the server is often involved. When communicating with the server, we often need to obtain the returned HTTP status code to determine whether the operation is successful, and perform corresponding processing based on different status codes. This article will teach you how to use JavaScript to obtain HTTP status codes and provide some practical code examples. Using XMLHttpRequest

Usage: In JavaScript, the insertBefore() method is used to insert a new node in the DOM tree. This method requires two parameters: the new node to be inserted and the reference node (that is, the node where the new node will be inserted).

JavaScript is a programming language widely used in web development, while WebSocket is a network protocol used for real-time communication. Combining the powerful functions of the two, we can create an efficient real-time image processing system. This article will introduce how to implement this system using JavaScript and WebSocket, and provide specific code examples. First, we need to clarify the requirements and goals of the real-time image processing system. Suppose we have a camera device that can collect real-time image data
