截取javascript对象的属性/方法

截取javascript对象的属性/方法,javascript,Javascript,如何截获请求以获取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;

如何截获请求以获取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都是“未定义的”。

我认为没有办法拦截对未定义属性的访问。您始终可以执行以下操作

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. 

这在JavaScript ES6中使用对象是可能的


我想你的函数被遗漏了。这里有一个类似的问题——你不是指obj.get('someProperty');?我正在尝试替换一个现有对象,但无法替换调用它的javascript代码,因此obj.get(“”)和检查它是否在客户端代码中未定义对我来说不是选项。@BenElis抱歉,这是一个打字错误。修好了。那么,在这种情况下,这种技术是行不通的
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