0

オブジェクトのプロパティを封印しようとしています。

私の質問は、ここで Object.seal(personObject) を指定したことです。この特定のオブジェクトは封印されており、このオブジェクトで構成または拡張を行うことはできませんが、personObject_2 について言及しなかったように、拡張または構成を許可します。

プロトタイプでどのように作成できますか.つまり、どのクラスのタイプの人もこのシールを持っている/尊重する必要があります.そのような動作を達成できますか

"use strict";
var personModule=(function (module) {
   var  person=function (fname,lname) {
       Object.defineProperty(this,'firstName',{
          get:function () {
            return fname;
          }
          ,set:function (newValue) {
            fname=newValue;
         },
         configurable:true
       });

       Object.defineProperty(this,'lastName',{
         get:function () {
           return lname;
         }
         ,set:function (newValue) {
           lname=newValue;
         },
         configurable:true
       });

       Object.defineProperty(this,'fullName',{
         get:function () {
           return fname+lname;
         },
         configurable:true
       });

     }
     module.person=person;
     return module;
})(personModule || {});

var personObject=new personModule.person( "Raju","Rani");
console.log(personObject.fullName);
Object.seal(personObject);
//delete personObject.firstName;-->It throws error here




var personObject2=new personModule.person( "Shiva","Kumar");

delete personObject2.firstName;

console.log(personObject2.firstName);

ありがとう

4

2 に答える 2

1

コンストラクターに Object.seal を追加したくない場合のプロキシ バージョンを次に示します。

"use strict";
var personModule=(function (module) {
   var  person=function (fname,lname) {
   Object.defineProperty(this,'firstName',{
      get:function () {
        return fname;
      }
      ,set:function (newValue) {
        fname=newValue;
     },
     configurable:true
   });

   Object.defineProperty(this,'lastName',{
     get:function () {
       return lname;
     }
     ,set:function (newValue) {
       lname=newValue;
     },
     configurable:true
   });

   Object.defineProperty(this,'fullName',{
     get:function () {
       return fname+lname;
     },
     configurable:true
   });

 }
 module.person=new Proxy(person, {
     construct(target, args){
         args.unshift(null);
         let ctor = target.bind.apply(target, args);
         let result = new ctor();
         Object.seal(result);
         return result;
     }
 });
 return module;
})(personModule || {});

var personObject=new personModule.person( "Raju","Rani");
console.log(personObject.fullName);
Object.seal(personObject);
//delete personObject.firstName;-->It throws error here




var personObject2=new personModule.person( "Shiva","Kumar");

delete personObject2.firstName;

console.log(personObject2.firstName);

于 2016-11-26T07:41:07.993 に答える
0

試しましたか - immutable-js

var personObject = new personModule.person("Raju", "Rani");

var sealed = Immutable.Map(personObject);
于 2016-11-26T07:35:02.380 に答える