2

javascriptオブジェクトのメソッド/プロパティを取得し、代わりにカスタム値を返すリクエストをインターセプトするにはどうすればよいですか?

例えば、

var obj = {
    // This "get" method is where I want to replace the call to get a property of an object.
    get : function(propertyName) {
        if (propertyName == 'somePropertyThatDoesntExist') { return 1; }
        else { return 0; } // Something like this?
};

// Either this method of access,
var myValue1 = obj.somePropertyThatDoesntExist
var myValue2 = obj.someOtherPropertyThatDoesntExist

// Alternatively, 
var myValue3 = obj['somePropertyThatDoesntExist']
var myValue4 = obj['someOtherPropertyThatDoesntExist']

したがって、myValue1とmyValue3の値は1になり、myValue2とmyValue4の値は0になります。

現在、myValue1、2、3、4はすべて「未定義」です。

4

2 に答える 2

0

未定義のプロパティへのアクセスを傍受する方法はないと思います。あなたはいつでも次のことができます

if(obj.someProperty != undefined)
    obj.someProperty // access the property

または、getメソッドを作成することもできます

var obj = {
    someProperty : "val",
    get : function(propertyName) {

        if (this[propertyName] == undefined) { return 0; }
        else { return this[propertyName]; } 
    }
};

のように使用します

obj.get("someProperty") // returns 0 if property is not defined. 
于 2013-03-01T13:02:49.630 に答える
0

これは、 Proxyオブジェクトを使用するJavaScriptES6で可能です。

var obj = {}

// Wrap the object using Proxy
obj = new Proxy(obj, {
  get : function (target, propertyName) {
    if (propertyName === 'somePropertyThatDoesntExist') { return 1; }
    else { return 0; }
  }
})

var myValue1 = obj.somePropertyThatDoesntExist       // 1
var myValue2 = obj.someOtherPropertyThatDoesntExist  // 0
于 2021-04-09T18:00:54.283 に答える