JavaScript中的对象和对象构造函数?
在面向对象编程的生活世界中,我们已经知道类和对象的重要性,但是与其他编程语言不同,JavaScript没有其他语言所具有的传统类。但是JavaScript具有对象和构造函数,它们在大多数情况下以相同的方式工作以执行相同的操作。
- 构造函数是与“new”关键字一起使用的常规JavaScript函数。构造函数在JavaScript中有两种类型,即内置构造函数(数组和对象)和自定义构造函数(定义特定对象的属性和方法)。
- 当我们需要一种创建可以多次使用而不必每次都重新定义对象的对象“type”的构造函数时,构造函数会很有用,这可以使用Object Constructor函数来实现。按照惯例,大写的构造函数名称会将其与常规函数区分开。
例如,考虑以下代码:
function Automobile(color) {
this.color=color;
}
var vehicle1 = new Automobile ("red");
函数“Automobile()”是一个对象构造函数,其属性和方法即“color”在其内部声明为关键字“this”。然后使用关键字“new”将使用对象构造函数定义的对象转换为即时对象。
调用新的Automobile()时,JavaScript执行以下两项操作:
- 它创建一个新的新对象(实例)Automobile()并将其分配给变量。
- 它将对象的构造函数属性“color”设置为Automobile。
Object.seal()方法
在对象构造器方法中,有一个方法Object.seal()用于密封对象。密封对象不允许添加新属性,并将所有现有属性标记为不可配置。尽管可以写入当前属性的值,但可以对其进行更改。
要密封的对象作为参数传递,并且该方法返回已密封的对象。
Difference between Object.freeze() Method and Object.seal() Method
如果使用Object.freeze()方法冻结对象,则其属性变为不可变,并且无法对其进行更改;而如果使用Object.seal()方法密封了对象,则可以在对象的现有属性中进行更改。 。
应用范围:
- Object.seal()用于密封对象和数组。
- Object.seal()用于使对象不可变。
用法:
Object.seal(obj)
Parameters Used:
- obj : It is the object which has to be sealed.
返回值:
Object.sealed() returns the object that was passed to the function.
下面提供上述函数的示例。
例子:
Input : const obj1 = { property1: 'initial_data'}; const obj2 = Object.seal(obj1); obj2.property1 = 'new_data'; console.log(obj2.property1); Output : "new_data"
说明:在此示例中,已为对象“ob2”分配了对象“obj1”的属性,并且已对其进行密封,因此无法添加新值。 obj2的属性1的值已更新,因为密封对象允许更改现有属性。
Input : var obj = { prop: function() {}, name: 'adam' }; console.log(obj); obj.name = 'billy'; delete obj.prop; console.log(obj); var o = Object.seal(obj); delete obj.prop; console.log(obj); obj.name = 'chris'; console.log(obj); Output : Object { prop: function () {}, name: "adam" } Object { name: "billy" } Object { name: "billy" } Object { name: "chris" }
说明:在此示例中,对象“obj”被分配了“ prop:function”,由于未密封对象“ obj”,该对象后来被删除。此后,为新对象“o”分配了“obj”的密封值,以防止其删除但允许更新现有属性。
下面提供了上述函数的代码。
代码1:
<script>
// creating an object constructor and assigning values to it
const obj1 = { property1: 'initial_data'};
// creating a second object which will seal the properties of the first object
const obj2 = Object.seal(obj1);
// Updating the properties of the frozen object
obj2.property1 = 'new_data';
// Displaying the properties of the frozen object
console.log(obj2.property1);
</script>
输出:
"new_data"
代码2:
<script>
// creating an object constructor and assigning values to it
var obj = { prop: function() {}, name: 'adam' };
// Displaying the properties of the object created
console.log(obj);
// Updating the properties of the object
obj.name = 'billy';
delete obj.prop;
// Displaying the updated properties of the object
console.log(obj);
// Sealing the object using object.seal() method
var o = Object.seal(obj);
// Updating the properties of the object
delete obj.prop;
// Displaying the updated properties of the object
console.log(obj);
// Updating the properties of the sealed object
obj.name = 'chris';
// Displaying the properties of the frozen object
console.log(obj);
</script>
输出:
Object { prop: function () {}, name: "adam" } Object { name: "billy" } Object { name: "billy" } Object { name: "chris" }
异常:
- 如果传递的参数不是对象,则会导致TypeError。
- 删除属性或将属性添加到密封对象将失败或引发TypeError。
- 将数据属性转换为访问器,反之亦然将引发TypeError。
参考:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/seal
注:本文由纯净天空筛选整理自Shubrodeep Banerjee大神的英文原创作品 Object.seal() In JavaScript。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。