JavaScript 属性是指 JavaScript 中的变量,它们可以用来存储和访问数据。JavaScript 属性可以是基本类型(如字符串、数字、布尔值),也可以是复杂类型(如对象、数组、函数)。
JavaScript 属性有两种形式:全局属性和对象属性。全局属性是在全局作用域中定义的变量,它们可以在所有 JavaScript 代码中使用。而对象属性则是在特定对象中定义的变量,它们只能在该对象的作用域内使用。
// 全局变量 var name = "John"; // 对象变量 var person = { name: "John" };
JavaScript 具有动态特性,因此我们可以随时向 JavaScript 对象添加新的属性或方法。例如:
person.age = 25; // 添加一个新的 age 字段
此外,JavaScript 还允许我们使用特殊语法来创建“隐式”对象。例如:
document.write("Hello World!"); // document 是一个隐式对象
要获取属性属性,请使用Object.getOwnPropertyDescriptor()。
此方法仅适用于自己的属性。
此方法接受两个参数:要处理的对象和要检索的属性名称。
如果属性存在,您应该接收一个描述符对象有四个属性:可配置,可枚举,并且两个其他适合于属性的类型。
例如,以下代码创建一个属性并检查其属性:
var book1 = {
name : "Javascript"
}; // w ww. j a va2 s . c o m
var descriptor = Object.getOwnPropertyDescriptor(book1, "name");
console.log(descriptor.enumerable); // true
console.log(descriptor.configurable); // true
console.log(descriptor.writable); // true
console.log(descriptor.value); // "Javascript"
上面的代码生成以下结果。
上面的代码生成以下结果。...
[[Extensible]]属性是一个布尔值,指示对象本身是否可以修改。
我们创建的所有对象默认都是可扩展的,这意味着可以在任何时候向对象添加新属性。
通过将[[Extensible]]设置为false,我们可以防止新的属性添加到对象。
有三种不同的方法来完成这个。
创建不可扩展对象的一种方法是使用Object.preventExtensions()方法。
创建不可扩展对象的一种方法是使用Object.preventExtensions()方法。...
在对象上使用这个方法后,我们永远不会再次向其中添加任何新属性。
我们可以使用Object.isExtensible()检查[[Extensible]]的值。
我们可以使用Object.isExtensible()检查[[Extensible]]的值。...
var book1 = {
name : "Javascript"
};
console.log(Object.isExtensible(book1)); // true
Object.preventExtensions(book1);
console.log(Object.isExtensible(book1)); // false
book1.writeLine = function() {
console.log(this.name);
};
console.log("writeLine" in book1); // false
上面的代码生成以下结果。
尝试向不可扩展对象添加属性将在strict中抛出错误模式。
在非严格模式下,操作失败。
创建不可扩展对象的第二种方式是密封对象。
密封对象不可扩展,其所有属性都是不可配置的。
我们不能向对象添加新属性,我们不能删除属性或更改其类型。
如果对象被密封,您只能读取和写入其属性。
我们可以在对象上使用Object.seal()方法来封装它。
调用Object.seal()方法后,[[Extensible]]属性设置为false,并且所有属性的[[Configurable]]属性设置为false。
我们可以使用Object.isSealed()来检查对象是否被密封,如下所示:
var book1 = {
name : "Javascript"
}; // w w w. j a v a 2 s. c o m
console.log(Object.isExtensible(book1)); // true
console.log(Object.isSealed(book1)); // false
Object.seal(book1);
console.log(Object.isExtensible(book1)); // false
console.log(Object.isSealed(book1)); // true
book1.writeLine = function() {
console.log(this.name);
};
console.log("writeLine" in book1); // false
book1.name = "CSS";
console.log(book1.name); // "CSS"
delete book1.name;
console.log("name" in book1); // true
console.log(book1.name); // "CSS"
var descriptor = Object.getOwnPropertyDescriptor(book1, "name");
console.log(descriptor.configurable); // false
上面的代码生成以下结果。
上面的代码生成以下结果。...
创建不可扩展对象的最后一种方法是冻结它。
创建不可扩展对象的最后一种方法是冻结它。...
冻结对象是一个密封对象,其中数据属性也是只读的。
冷冻物品冻结后不能冻结。
我们可以通过使用Object.freeze()来冻结对象,并确定是否通过使用Object.isFrozen()冻结对象。
例如:
var book1 = {
name : "Javascript"
};
console.log(Object.isExtensible(book1)); // true
console.log(Object.isSealed(book1)); // false
console.log(Object.isFrozen(book1)); // false
Object.freeze(book1);
console.log(Object.isExtensible(book1)); // false
console.log(Object.isSealed(book1)); // true
console.log(Object.isFrozen(book1)); // true
book1.writeLine = function() {
console.log(this.name);
};
console.log("writeLine" in book1); // false
book1.name = "CSS";
console.log(book1.name); // "Javascript"
delete book1.name;
console.log("name" in book1); // true
console.log(book1.name); // "Javascript"
var descriptor = Object.getOwnPropertyDescriptor(book1, "name");
console.log(descriptor.configurable); // false
console.log(descriptor.writable); // false
上面的代码生成以下结果。
Javascript面向对象设计 -Javascript构造函数继承构造函数继承是通过从构造函数重置原型来完成的。function Rectangle(length, w...
Javascript面向对象设计 -Javascript属性类型有两种不同类型的属性:数据属性和访问器属性。数据属性包含一个值,如book1的name属...
JavaScript 对象JavaScript 对象是拥有属性和方法的数据。真实生活中的对象,属性和方法 真实生活中,一辆汽车是一个对象。对象...