JavaScript Object.defineProperty()

Definition og brug

Object.defineProperty() Metoden bruges til at tilføje eller ændre egenskaber på objektet.

Object.defineProperty() Metoden giver dig mulighed for at ændre egenskabens metadata.

Object.defineProperty() Metoden tillader dig at tilføje getter og setter.

Relaterede metoder:

Object.defineProperty() Tilføj eller ændr egenskaber.

Object.defineProperties() Tilføj eller ændr flere egenskaber.

Object.getOwnPropertyNames() Returnerer alle egenskabsnavnene på objektet.

Object.getOwnPropertyDescriptor() Returnerer beskrivelsen af egenskaben.

Object.getOwnPropertyDescriptors() Returnerer beskrivelsen af alle egenskaberne på objektet.

Eksempel

Eksempel 1

Tilføj egenskab:

// 创建一个对象
const person = {
  firstName: "Bill",
  lastName: "Gates"
  language: "EN"
};
// Tilføj en ny egenskab
Object.defineProperty(person, "year", {value:"2008"});

Prøv det selv

Eksempel 2

Ændr egenskab:

// 创建一个对象
const person = {
  firstName: "Bill",
  lastName: "Gates"
  language: "EN"
};
// 修改一个属性
Object.defineProperty(person, "language", {value:"NO"});

Prøv det selv

Eksempel 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>";
}
// Vis egenskab
document.getElementById("demo").innerHTML = txt;

Prøv det selv

Eksempel 4

Næste eksempel er det samme som det forrige eksempel kode, men skjuler property-attributten, så den ikke er enumerable:

// 创建一个对象
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;

Prøv det selv

例子 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;

Prøv det selv

例子 6

此例使用 getter 将 firstName 和 lastName 连接起来:

// 创建一个对象
const person = {
  firstName: "Bill",
  lastName: "Gates"
};
// 定义一个 Getter
Object.defineProperty(person, "fullName", {
  get: function () { return this.firstName + " " + this.lastName; }
});

Prøv det selv

例子 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; }
});

Prøv det selv

Syntaks

Object.defineProperty(objekt, egenskab, beskrivelse)

parametre

parametre Beskrivelse
objekt Obligatorisk. Målobjektet.
egenskab Obligatorisk. Egenskabsnavn.
beskrivelse

Obligatorisk. At tilføje eller ændre egenskabsbeskrivelsen:

  • value: value
  • writable : true|false
  • enumerable : true|false
  • configurable : true|false
  • get : function
  • set : function

Returværdi

Type Beskrivelse
Object Ændrede objekter.

Browserstøtte

Object.defineProperty() Er en funktion af ECMAScript5 (ES5).

Fra juli 2013 har alle moderne browsere fuldt støtte til ES5 (JavaScript 2009):

Chrome Edge Firefox Safari Opera
Chrome 23 IE/Edge 11 Firefox 21 Safari 6 Opera 15
September 2012 September 2012 April 2013 Juli 2012 Juli 2013