JS Object.prevent Extensions()、Object.seal()とObject.freeze()用法例分析

6824 ワード

本論文の実例はJS Object.prevent Extensions()、Object.seal()とObject.freeze()の使い方を述べている.皆さんに参考にしてあげます.具体的には以下の通りです.
一、基本的な紹介
Method
Description
Param
Detail
Object.prevent Extensions()
オブジェクトを拡張できないようにします.つまり、新しい属性を追加することはできません.
Object
詳細
Object.isExtensioble()
オブジェクトが拡張可能かどうかを判断します.
Object
詳細
Object.seal()
一つのオブジェクトを密封し、密封されたオブジェクトに戻す.シールオブジェクトとは、新たな属性を追加できず、既存の属性を削除できない、既存の属性を変更できないエニュメレート・設定可能性・書き込み可能性を指しますが、既存の属性の値を変更することができるオブジェクトです.
Object
詳細
Object.isSealed()
オブジェクトがシールされているかどうかを判断します.
Object
詳細
Object.freeze()
オブジェクトを凍結し、凍結されたオブジェクトを返します.凍結対象とは、新しい属性を追加できない、既存の属性の値を変更できない、既存の属性を削除できない、既存の属性を変更できない、エニュメレート・コンフィギュレーション、書き込み可能なオブジェクトのことです.つまり、この対象は永遠に可変ではないということです.
Object
詳細
Object.isFrozen()
オブジェクトが凍結されているかどうかを判断します.
Object
詳細
二、Object.prevent Extensions()
Object.prevent Extensionsは、オブジェクトが新しい自身の属性を追加できなくなるのを阻止するだけで、オブジェクトのプロトタイプに属性を追加することができます.
2.1 prevent Extensionsの設定()

var jb51 = {
    name: "zuojj"
};
Object.preventExtensions(jb51);
jb51.url = "https://www.jb51.net";
//Outputs: undefined
console.log(jb51.url);

2.2厳格モードで使用するとエラーが発生します.
ただし、厳しいモードではエラーが発生します.

"use strict";
var jb51 = {
    name: "zuojj"
};
Object.preventExtensions(jb51);
jb51.url = "https://www.jb51.net";
//Outputs: Uncaught TypeError: Can't add property url, object is not extensible
console.log(jb51.url);

2.3属性の拡張はできませんが、既に存在している属性値を変更することができます.

var jb51 = {
    name: "zuojj"
};
Object.preventExtensions(jb51);
jb51.url = "https://www.jb51.net";
//Outputs: Uncaught TypeError: Can't add property url, object is not extensible
console.log(jb51.url);

2.4既存の属性の削除を阻止できません.

var jb51 = {
    name: "jb51",
    url : "https://www.jb51.net"
};
Object.preventExtensions(jb51);
delete jb51.url;
//Outputs: {name: "jb51"}
console.log(jb51);

2.5 Object.defineProperty方法を使用して、拡張不可能なオブジェクトに新しい属性を追加すると、例外が発生します.

var jb51 = {
    name: "jb51"
};
Object.preventExtensions(jb51);
jb51 = Object.defineProperty(jb51, "url", {value: "https://www.jb51.net" });
//Outputs: Uncaught TypeError: Cannot define property:url, object is not extensible.
console.log(jb51);

2.6オブジェクトが拡張可能かどうかを判断する

var jb51 = {
    name: "jb51",
    url : "https://www.jb51.net"
};
Object.preventExtensions(jb51);
//Outputs: false
console.log(Object.isExtensible(jb51));

2.7凍結対象と密封の対象は拡張不可の対象です.

var jb51 = {
    name: "jb51"
},
sealed = Object.seal(jb51),
frozen = Object.freeze(jb51);
//Outputs: false false
console.log(Object.isExtensible(sealed), Object.isExtensible(frozen));

三、Object.seal()
3.1属性は追加できませんが、属性値は変更できます.

var jb51 = {
    name: "zuojj",
    url: "https://www.jb51.net"
};
Object.seal(jb51),
jb51.sex = "male";
jb51.name = "jb51";
//Outputs: {name: "jb51", url: "https://www.jb51.net"}
console.log(jb51);

3.2厳格モードで使用するとエラーが発生します.
3.3 deleteは既存の属性を削除できません.

var jb51 = {
    name: "jb51",
    url: "https://www.jb51.net"
};
Object.seal(jb51),
delete jb51.name;
//Outputs: {name: "jb51", url: "https://www.jb51.net"}
console.log(jb51);

3.4 Object.definePropertyはオブジェクト属性を拡張できません.

var jb51 = {
    name: "jb51",
    url: "https://www.jb51.net"
};
Object.seal(jb51);
Object.defineProperty(jb51, "sex", {value: "male"})
//Outputs: Uncaught TypeError: Cannot define property:sex, object is not extensible.
console.log(jb51);

シールの対象は広げてはいけないと言っていましたので、エラーが発生します.
3.5対象がシールの対象かどうかを判断する.

//             .
var empty = {};
//Outputs: false
console.log(Object.isSealed(empty));
//     &&      ===     .
Object.preventExtensions(empty);
//Outputs: true
console.log(Object.isSealed(empty));
//      &&               ,                     .
var hasProp = { fee: "fie foe fum" };
Object.preventExtensions(hasProp);
//Outputs: false
console.log(Object.isSealed(hasProp));
//              ,             .
Object.defineProperty(hasProp, "fee", { configurable: false });
//Outputs: true
console.log(Object.isSealed(hasProp));
console.log("-------------");
//                 ,      .
var s1 = {};
Object.seal(s1);
//Outputs: true
console.log(Object.isFrozen(s1));
var s2 = Object.seal({ p: 3 });
//Outputs: false
console.log(Object.isFrozen(s2)); //   "p"  

四、Object.freeze()
4.1属性を追加できず、属性値を変更することができません.

var obj = {
    name: "jb51",
    url: "https://www.jb51.net"
};
Object.freeze(obj);
obj.sex = "male";
obj.name = "zuojj";
//Outputs: {name: "jb51", url: "https://www.jb51.net"}
console.log(obj);

4.2厳格なモードで使用するとエラーが発生します.
4.3 deleteは既存の属性を削除できません.

var obj = {
    name: "jb51",
    url: "https://www.jb51.net"
};
Object.freeze(obj);
delete obj.name;
//Outputs: {name: "jb51", url: "https://www.jb51.net"}
console.log(obj);

4.4対象が凍結されているかどうかを判断する.

var obj = {
    name: "jb51",
    url: "https://www.jb51.net"
};
Object.freeze(obj);
//Outputs: true
console.log(Object.isFrozen(obj));

五、互換性
Object.prevent Extensions()は、Object.isExtensioble()は、Object.seal()、Object.isSealed()、Object.freeze()、Object.isFrozen()は、ES 5仕様の一部であり、IE 8及び以下のバージョンのブラウザはサポートされていません.Opreaはサポートしていません
興味のある友達はオンラインHTML/CSS/JavaScriptコードを使ってツールを実行できます.http://tools.jb51.net/code/HtmlJsRun上記のjsコードをテスト実行します.
もっと多くのJavaScriptに関する内容について興味がある読者は、当駅のテーマを見ることができます.「javascript対象入門教程」、「JavaScriptエラーとデバッグ技術のまとめ」、「JavaScriptデータ構造とアルゴリズム技術のまとめ」、「JavaScript巡回アルゴリズムとテクニックの総括」及び「JavaScript数学演算の使い方のまとめ」
本論文で述べたように、JavaScriptプログラムの設計に役に立ちます.