Javascript – 捕获对象的属性

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

例:

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

var Foo = (function(){
    var self = {};
    //... set a few properties
    return self;
})();

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

Foo.bar

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

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

Foo.prototype.undefined = function(){
    var name = this.name; //name of property they attempted to access (bar)
    Foo[name] = function(){
        //...do something
    };
    return Foo[name];
}

功能,不像我的例子.

概念

Foo.* = function(){
}

背景

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

Foo = function(){};
Foo.prototype.call = function(thisArg){
    console.log(this,thisArg);
    return this;
}

解决方法

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

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

这是答案的代理示例:

var obj = new Proxy({},{
    get: function(target,name) {
        if (!(name in target)) {
            console.log("Getting non-existant property '" + name + "'");
            return undefined;
        }
        return target[name];
    },set: function(target,name,value) {
        if (!(name in target)) {
            console.log("Setting non-existant property '" + name + "',initial value: " + value);
        }
        target[name] = value;
    }
});

console.log("[before] obj.foo = " + obj.foo);
obj.foo = "bar";
console.log("[after] obj.foo = " + obj.foo);

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

运行时输出

Getting non-existant property 'foo'
[before] obj.foo = undefined
Setting non-existant property 'foo',initial value: bar
[after] obj.foo = bar
原文链接:https://www.f2er.com/js/153580.html

猜你在找的JavaScript相关文章