2017-05-29 4 views
0
var funcSetter = { 

    defineProperty: function(target, prop, descriptor) { 
     if (prop) { 
      let temp = descriptor.value; 
      descriptor.value = temp => { 
       if (temp.startsWith('_')) { 
        temp = "Default Value Attached , no Underscores allowed"; 
        return temp; 
       } else return temp; 
      }; 
     } 
     return true; 
    } 
}; 

let proxy_3 = new Proxy(obj_3, funcSetter); 

Object.defineProperty(proxy_3, 'no', { 
    value: '_Bharath', 
    writable: true, 
    enumerable: true, 
    configurable: true 
}); 

私はここに直面しています問題は、私はトラップdefinePropertyを呼び出すときに、descriptor.valueの下で定義された矢印の関数が呼び出されないということである下部に真のリターンを打つとundefineddefinePropertyメソッドから未定義の値を取得するのはなぜですか?

としてプロパティの値を設定します

私は矢の機能を正しく使用していないと確信しています。誰も私を正しい方向に導くことができますか?

ありがとうございました。とても有難い!

+0

いくつかの使用例を追加してください。 –

+0

これは何か、私はプロキシを学びながらJSでリフレクトしながら実験していました。ユースケース自体はありません。 – Bharath

+0

* definePropertyメソッドは、プロパティが正常に定義されているかどうかを示すブール値を返す必要があります。* - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/defineProperty #Return_value –

答えて

1

二つの問題があります。

  1. あなただけdescriptor.value矢印機能を割り当てているが。それを呼び出さない。
  2. あなたは実際にと設定されていません。どこにでもあります。私はこの問題も

    var funcSetter = { 
     
    
     
        defineProperty: function(target, prop, descriptor) { 
     
        if (prop) { 
     
         let temp = descriptor.value; 
     
         // Use an IIFE 
     
         descriptor.value = (temp => { 
     
         if (temp.startsWith('_')) { 
     
          return "Default Value Attached , no Underscores allowed"; 
     
         } else { 
     
          return temp; 
     
         }; 
     
         })(temp); 
     
        } 
     
        // Use Reflect.defineProperty to actually set the property 
     
        return Reflect.defineProperty(target, prop, descriptor); 
     
        } 
     
    }; 
     
    
     
    let obj_3 = {}; 
     
    let proxy_3 = new Proxy(obj_3, funcSetter); 
     
    
     
    Object.defineProperty(proxy_3, 'no', { 
     
        value: '_Bharath', 
     
        writable: true, 
     
        enumerable: true, 
     
        configurable: true 
     
    }); 
     
    
     
    console.log(obj_3);

    、この

    var funcSetter = { 
     
    
     
        defineProperty: function(target, prop, descriptor) { 
     
        if (prop) { 
     
         if (descriptor.value.startsWith('_')) { 
     
         descriptor.value = "Default Value Attached , no Underscores allowed"; 
     
         } 
     
        } 
     
        // Use Reflect.defineProperty to actually set the property 
     
        return Reflect.defineProperty(target, prop, descriptor); 
     
        } 
     
    } 
     
    let obj_3 = {}; 
     
    let proxy_3 = new Proxy(obj_3, funcSetter); 
     
    
     
    Object.defineProperty(proxy_3, 'no', { 
     
        value: '_Bharath', 
     
        writable: true, 
     
        enumerable: true, 
     
        configurable: true 
     
    }); 
     
    
     
    console.log(obj_3);
    を行うにはMUCH簡単な方法を解決すべきだと思う
+0

アイフルははるかに設計されています。 –

+0

私は同意します。最低限の変更でOPのコードを変更しようとしています。実際には 'if..else'で十分です。 –

+0

私はこの問題に対するより簡単なアプローチを試みてそれを解決しましたが、なぜ矢印関数のアプローチがうまくいかなかったのか迷っていました。 – Bharath

関連する問題