[対処] JS Soul Questions Issue 26:Practice ES 14 Methods of Operating Objects

前書き

この記事で説明する内容はについてES 14种操作对象的方法ですので、本日質問させていただければ一緒に見ていきましょう。

星を見上げる人は笑ってはいけません

ES 14のオブジェクト操作方法

プロトタイプを入手する

var obj = {
    
    a:1,b:2};
// 1.获取原型 [[GetPrototypeOf]]
var proto = Object.getPrototypeOf(obj);
console.log(proto);
console.log(obj.__proto__);
console.log(Object.prototype);

印刷結果は次のとおりです。

プロトタイプをセットアップする

var obj = {
    
     a: 1, b: 2 };
// 2.设置原型 [[SetPrototypeOf]]
Object.setPrototypeOf(obj, {
    
     c: 3, d: 4 });
// 同样也可以采用如下两种方式,直接赋值
// obj.__proro__ = xxx;
// Object.prototype = xxx;
console.log(obj);

印刷結果は次のとおりです。

オブジェクト取得のスケーラビリティ

var obj = {
    
     a: 1, b: 2 };
// 3.获取对象的可拓展性 [[IsExtensible]]
var extensible = Object.isExtensible(obj);
console.log(extensible);
// 冻结对象
Object.freeze(obj);
var extensible2 = Object.isExtensible(obj);
console.log(extensible2);

印刷結果はtrue falseです。

ああ、そこから新しいものを見つけましたfreeze、アクションは凍結されたオブジェクトです閉じたオブジェクトsealと呼ばれる関連オブジェクトがあります(自閉症...ジョークと呼ばれ^_^ます)、または例を上げて比較して、最初にseal閉じたオブジェクトを導入します:

var obj = {
    
     a: 1, b: 2 };
Object.seal(obj);
obj.c = 3;  // 不可修改
console.log(obj);
delete obj.a; // 不可删除
console.log(obj);
obj.b = 3; // 可写
console.log(obj);

印刷結果は、変更不可、削除不可、書き込み可能の 3つのポイントを要約した次のとおりですプラス可読。

var obj = {
    
     a: 1, b: 2 };
Object.freeze(obj);
obj.c = 3;  // 不可修改
console.log(obj);
delete obj.a; // 不可删除
console.log(obj);
obj.b = 3; // 不可写
console.log(obj);
for (var key in obj) {
    
    
  console.log(obj[key]);
}

印刷結果は、変更不可削除不可、書き込み不可、読み取り専用の3つのポイントを要約した次のとおりです。

自分のプロパティを取得する

var obj = {
    
     a: 1, b: 2 };
// 4.获取自有属性 [[getOwnProperty]]
Object.setPrototypeOf(obj, {
    
     c: 3, d: 4 });
console.log(Object.getOwnPropertyNames(obj));

答えは[ 'a', 'b' ]です。

禁止延長

var obj = {
    
     a: 1, b: 2 };
// 5.禁止拓展对象 [[PreventExtensions]]
Object.preventExtensions(obj);
obj.c = 3;
console.log(obj);
delete obj.a;
console.log(obj);

答えは{ a: 1, b: 2 }展開に反対する{ b: 2 }ことはできませobjんが、削除することはできます。簡単に言うと、属性を追加することは禁止されていますが、属性は削除できます

オブジェクト操作の傍受

// var obj = { a: 1, b: 2 };
// 6.拦截对象操作 [[DefineOwnProperty]]
// Object.defineProperty()

それが独自の属性であるかどうかを判別する

var obj = {
    
     a: 1, b: 2 };
// 7.判断是否是自身属性 [[HasProperty]]
console.log(obj.hasOwnProperty('a'));

答えはtrueです。

オブジェクトのプロパティを取得する

var obj = {
    
     a: 1, b: 2 };
// 8.获取对象属性 [[Get]]
console.log('c' in obj);
console.log('a' in obj);
console.log(obj.a);

印刷結果は次のとおりです。

false
true
1

オブジェクトのプロパティを設定する

var obj = {
    
     a: 1, b: 2 };
// 9.设置对象属性 [[SET]]
obj.a = 3;
obj['b'] = 4;
console.log(obj);

答える{ a: 3, b: 4 }

オブジェクトのプロパティを削除する

var obj = {
    
     a: 1, b: 2 };
// 10.删除对象属性 [[Delete]]
delete obj.a;
console.log(obj);

答えは{ b: 2 }です。

オブジェクトのプロパティを列挙する

var obj = {
    
     a: 1, b: 2 };
// 11. 枚举 [[Enumerate]]
for (var k in obj) {
    
    
  console.log(obj[k]);
}
1
2

キーコレクションを取得する

var obj = {
    
     a: 1, b: 2 };
// 12.获取键集合 [[OwnPropertyKeys]]
console.log(Object.keys(obj));

回答 [ 'a', 'b' ]

関数を呼び出す

// 13.调用函数
var obj = {
    
     a: 1, b: 2 };
function test() {
    
     }
test();
obj.test = function () {
    
     }
obj.test();

newはオブジェクトをインスタンス化します

// 14.实例化对象
function Test() {
    
     };
new Test();

やっと

記事の出力は簡単ではありません。みなさんがwaveをサポートしてくれることを願っています!

過去の選択:

リトルライオンフロントエンドのメモ倉庫

友達が読んで遊ぶのに便利なChaoyiのブログアクセスしてください

学如逆水行舟,不进则退

おすすめ

転載: blog.csdn.net/weixin_42429718/article/details/108716978