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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。