Javascript:defineProperty

1463 ワード

オブジェクトの属性は、プログラマの意思で設定できます.セット、ゲット方法
var obj = { firstname:"John",lastname:"Smith",};

Object.defineProperty(obj, 'fullname', 
    {
        get : function() { return obj.firstname + " " + obj.lastname },
        set : function( name ){  
                  let arr=name.split(" ");
                  obj.firstname = arr[0];
                  obj.lastname = arr[1];
              }
    }
);

console.log(obj.fullname)
obj.fullname = "Michael Jordan"
console.log(obj.firstname, obj.lastname)
set,getメカニズムは近代的なプログラミング言語の重要なメカニズムである.このテクニックの利点は、古いコードを修正することなく、属性のコードを直接読んだり書いたりすることができます.間接的にsetを経て、get関数が呼び出されて、後ろの属性を書いたりします.これは実際には両方を占めています.一方で、私たちはconsolie.log(obj.get Firstname)のような複雑なコードを書かなくてもいいです.一方で、get Fistname()のサービスも享受しています.読み取り専用属性
var obj = {};

Object.defineProperty(obj, "a",
{
    value: 40,
    writable: false,
});

obj.a=10; //error(strict   )        
列挙できない属性 
var obj = {};
obj.a=10;
obj.b=20;
obj.c=30;

Object.defineProperty(obj, "d",
{
    value: 40,
    enumerable: false
});

for (var tmp in obj)  //   d
    console.log(tmp,"  ", obj[tmp])   
設定できない属性
var obj = {};

Object.defineProperty(obj, "d",
{
    value: 40,
    configurable: false
});

delete obj.d  //    

console.log(obj.d)  //  40

属性dの読み取り専用性、列挙性、set、get方法などを変更できるという意味です.一度設定された設定は、不変性が良い特性ですので、非常に良いことです.