JavaScript Object.defineProperty()
- ກັບຄືນບ່ອນຕໍ່າ defineProperties()
- ການໄປບ່ອນຕໍ່ໄປ entries()
- ກັບຄືນຊຸມຊົນ ປືກສາຂອງ Object
ການອະທິບາຍແລະການນໍາໃຊ້
Object.defineProperty()
ວິທີການນີ້ອາດຈະເພີ່ມຫຼືປ່ຽນລະບຽບຂອງໂອກາດ.
Object.defineProperty()
ວິທີການນີ້ອາດຈະປ່ຽນວິທີຂອງລະບຽບ.
Object.defineProperty()
ວິທີການນີ້ອາດຈະຕອບຕາມ getter ແລະ setter.
ວິທີການທີ່ກ່ຽວຂ້ອງ:
Object.defineProperty()
ການເພີ່ມຫຼືການປັບປຸງລະບຽບ.
Object.defineProperties()
ການເພີ່ມຫຼືການປັບປຸງລະບຽບຫຼາຍອັນ.
Object.getOwnPropertyNames()
ການກັບຄືນຊື່ຂອງລະບຽບທັງໝົດຂອງໂອກາດ.
Object.getOwnPropertyDescriptor()
ການກັບຄືນລະບຽບຂອງລະບຽບ.
Object.getOwnPropertyDescriptors()
ການກັບຄືນຂອງລະບຽບຂອງບັນດາລະບຽບທັງໝົດຂອງໂອກາດ.
ຄວາມຄິດອີກ
ຕົວຢ່າງ 1
ການເພີ່ມລະບຽບ:
// 创建一个对象 const person = { firstName: "Bill", lastName: "Gates" language: "EN" }; // ການເພີ່ມລະບຽບໃໝ່ Object.defineProperty(person, "year", {value:"2008"});
ຕົວຢ່າງ 2
ການປັບປຸງລະບຽບ:
// 创建一个对象 const person = { firstName: "Bill", lastName: "Gates" language: "EN" }; // 修改一个属性 Object.defineProperty(person, "language", {value:"NO"});
ຕົວຢ່າງ 3
// 创建一个对象 const person = { firstName: "Bill", lastName: "Gates" language: "NO" }; // 修改一个属性 Object.defineProperty(person, "language", { value: "EN" writable: true, enumerable: true, configurable: true }); // 枚举属性 let txt = ""; for (let x in person) { txt += person[x] + "<br>"; } // ສະແດງລະບຽບ document.getElementById("demo").innerHTML = txt;
ຕົວຢ່າງ 4
ຄວາມຄິດທີ່ຕໍ່ມາກັບຄວາມຄິດທີ່ກ່ອນໜ້ານີ້ອາດຈະບາງການປັບປຸງlanguage attribute ເພື່ອບໍ່ເປັນພິມສັບ:
// 创建一个对象 const person = { firstName: "Bill", lastName: "Gates" language: "NO" }; // 修改一个属性 Object.defineProperty(person, "language", { value: "EN" writable: true, enumerable: false, configurable: true }); // 枚举属性 let txt = ""; for (let x in person) { txt += person[x] + "<br>"; } document.getElementById("demo").innerHTML = txt;
例子 5
此例创建了一个 setter 和 getter,以确保 language 属性的更新为大写:
// 创建一个对象 const person = { firstName: "Bill", lastName: "Gates" language: "NO" }; // 修改一个属性 Object.defineProperty(person, "language", { get: function() { return language }, set: function(value) { language = value.toUpperCase() } }); // 修改 language person.language = "en"; // 显示 language document.getElementById("demo").innerHTML = person.language;
例子 6
此例使用 getter 将 firstName 和 lastName 连接起来:
// 创建一个对象 const person = { firstName: "Bill", lastName: "Gates" }; // 定义一个 Getter Object.defineProperty(person, "fullName", { get: function () { return this.firstName + " " + this.lastName; } });
例子 7
JavaScript 的 Getter 和 Setter 非常适合创建计数器:
// 定义 Setter 和 Getter Object.defineProperty(obj, "reset", { get: function () { this.counter = 0; } }); Object.defineProperty(obj, "increment", { get: function () { this.counter++; } }); Object.defineProperty(obj, "decrement", { get: function () { this.counter--; } }); Object.defineProperty(obj, "add", { set: function (value) { this.counter += value; } }); Object.defineProperty(obj, "subtract", { set: function (value) { this.counter -= value; } });
语法
Object.defineProperty(object, property, descriptor)
参数
参数 | 描述 |
---|---|
object | 必需。目标对象。 |
property | 必需。属性名。 |
descriptor |
必需。要添加或修改的属性描述符:
|
返回值
类型 | 描述 |
---|---|
Object | 修改后的对象。 |
浏览器支持
Object.defineProperty()
是 ECMAScript5 (ES5) 的特性。
自 2013 年 7 月起,所有现代浏览器均完全支持 ES5(JavaScript 2009):
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 23 | IE/Edge 11 | Firefox 21 | Safari 6 | Opera 15 |
2012 ກໍລະກົດ 9 | 2012 ກໍລະກົດ 9 | 2013 ກໍລະກົດ 4 | 2012 ກໍລະກົດ 7 | 2013 ກໍລະກົດ 7 |
- ກັບຄືນບ່ອນຕໍ່າ defineProperties()
- ການໄປບ່ອນຕໍ່ໄປ entries()
- ກັບຄືນຊຸມຊົນ ປືກສາຂອງ Object