Javascript Harmony代理,检测是否访问或调用了属性

Javascript Harmony代理,检测是否访问或调用了属性,javascript,ecmascript-harmony,Javascript,Ecmascript Harmony,有没有一种方法可以使用代理来检测是否执行了某个属性,或者是否刚刚访问了该属性 'use strict'; require('harmony-reflect'); var Stub = { method: function (a) { console.log('q' + a + this.q); } }; var ProxiedLibrary = { get: function (target, name, receiver) { if

有没有一种方法可以使用代理来检测是否执行了某个属性,或者是否刚刚访问了该属性

'use strict';

require('harmony-reflect');

var Stub = {
    method: function (a) {
        console.log('q' + a + this.q);
    }
};

var ProxiedLibrary = {
    get: function (target, name, receiver) {
        if (name in target) {
            return target[name];
        }

        if (MAGIC_EXPRESSION) {
            return function() {
                return 'Return from nonexistent function!';
            };
        }

        return 'Property ' + name + ' is drunk and not available at the moment';
    }
};

var Library = new Proxy(Stub, ProxiedLibrary);

console.log(Library.nonexistent); //Everything is cool
console.log(Library.nonexistent()); //TypeError we don't want
我非常想模仿php的调用和get,最好是单独进行。尝试…捕获块不是一个选项


谢谢你

我只是一个代理的初学者,但据我所知,代理无法满足你的需要。它只是把你要找的东西还给你,它不知道你要怎么用它

有没有一种方法可以使用代理来检测是否执行了某个属性,或者是否刚刚访问了该属性

'use strict';

require('harmony-reflect');

var Stub = {
    method: function (a) {
        console.log('q' + a + this.q);
    }
};

var ProxiedLibrary = {
    get: function (target, name, receiver) {
        if (name in target) {
            return target[name];
        }

        if (MAGIC_EXPRESSION) {
            return function() {
                return 'Return from nonexistent function!';
            };
        }

        return 'Property ' + name + ' is drunk and not available at the moment';
    }
};

var Library = new Proxy(Stub, ProxiedLibrary);

console.log(Library.nonexistent); //Everything is cool
console.log(Library.nonexistent()); //TypeError we don't want
不,因为JavaScript不区分属性和方法。访问的都是属性,如果是函数,则可以调用它们的值


您需要返回一个函数(以便调用它),但也要模拟字符串,可能是通过篡改该函数对象的
.valueOf()
/
.toString()
/
@@toPrimitive
方法来实现的。

-这可能就行了。但我认为寻找一个问题的解决方案我想到了一个过度工程的方法。无论如何谢谢你!哦,更好的是:,这样我可以使用和存储一些参数。你不需要为此继承任何东西,闭包就足够了。