Javascript – 捕获对象的属性

前端之家收集整理的这篇文章主要介绍了Javascript – 捕获对象的属性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以捕获何时访问对象的(任何)属性,或尝试访问?

例:

我已经创建了自定义对象Foo

  1. var Foo = (function(){
  2. var self = {};
  3. //... set a few properties
  4. return self;
  5. })();

然后有一些针对Foo的动作 – 有人试图访问属性

  1. Foo.bar

有没有办法(原型,也许)来捕捉这个?酒吧可能在Foo上未定义.捕获任何尝试访问未定义的属性即可.

例如,如果bar在Foo上未定义,并且尝试使用Foo.bar,则会像:

  1. Foo.prototype.undefined = function(){
  2. var name = this.name; //name of property they attempted to access (bar)
  3. Foo[name] = function(){
  4. //...do something
  5. };
  6. return Foo[name];
  7. }

功能,不像我的例子.

概念

  1. Foo.* = function(){
  2. }

背景

如果我有一个自定义功能,我可以每次调用函数时收听(见下文).只是想知道是否可以通过财产访问.

  1. Foo = function(){};
  2. Foo.prototype.call = function(thisArg){
  3. console.log(this,thisArg);
  4. return this;
  5. }

解决方法

这将是可能的ECMAScript6,现在可以在Firefox,使用新的 proxy stuff.直到那时,不,我恐怕没有办法挂钩链.

花了我一段时间,但是我终于找到了my previous answer这个问题.查看代理的所有细节的答案等等.

这是答案的代理示例:

  1. var obj = new Proxy({},{
  2. get: function(target,name) {
  3. if (!(name in target)) {
  4. console.log("Getting non-existant property '" + name + "'");
  5. return undefined;
  6. }
  7. return target[name];
  8. },set: function(target,name,value) {
  9. if (!(name in target)) {
  10. console.log("Setting non-existant property '" + name + "',initial value: " + value);
  11. }
  12. target[name] = value;
  13. }
  14. });
  15.  
  16. console.log("[before] obj.foo = " + obj.foo);
  17. obj.foo = "bar";
  18. console.log("[after] obj.foo = " + obj.foo);

Live Copy(目前仅适用于Firefox)| Source

运行时输出

  1. Getting non-existant property 'foo'
  2. [before] obj.foo = undefined
  3. Setting non-existant property 'foo',initial value: bar
  4. [after] obj.foo = bar

猜你在找的JavaScript相关文章