拦截获取javascript对象的属性/方法
Intercept the fetching of properties / methods of a javascript object
我如何/可以拦截请求获取一个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都是"undefined"
在JavaScript ES6中可以使用Proxy对象
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
我不认为有一种方法来拦截访问未定义的属性。您总是可以执行以下操作
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.
相关文章:
- 为什么NgModelController属性/方法以$开头
- 如何使用设置属性方法在jquery中更改css
- 全局向对象添加属性/方法
- AngularJS $http.delete 在“类型错误:无法分配给只读属性'方法'”中中断
- 添加属性/方法的明确最佳方法
- 扩展类时继承而不是覆盖属性/方法
- Javascript子类对象不保留基类的属性/方法
- 将模型属性方法发送到客户端 Sails Angular
- 错误:参数 4 的值无效.属性“方法”:意外属性
- 类型错误:无法读取 nodejs 应用程序中未定义的属性“方法”
- 属性/方法无法初始化indexedDB
- 在javascript中定义属性方法的适当模式;类”;
- 创建两个函数来计算对象属性/方法
- 当getElementById返回null时,取消对属性/方法的访问
- 自定义属性方法如何在Sails js中工作
- 通过js中的数组属性方法进行迭代
- 为什么要添加属性/方法到视图模型AFTER定义
- 在Angular中,在闭包中引用服务属性/方法最合适的方式是什么?
- 列出一个对象的所有属性/方法
- Javascript:添加属性方法问题