javascript - 实例化对象时使用代理陷阱

开发者82

我想要一个可以实例化的 javascript 函数,并捕获每个调用它的未定义方法(代理陷阱)。

到目前为止,我所拥有的是:

var MyProxyFunction = new Proxy(function () {
        console.log(">>>>>>>>>>>>>>>>>>>> constructor");
    }, {
    get: function(target, prop) {
        if (target[prop] === undefined) {
            return function()  {
                console.log('an otherwise undefined function!!');
            };
        }
        else {
            return target[prop];
        }
    }
});

现在,如果我调用MyProxyFunction.foo(),它会被调用(我会看到“构造函数”被触发,以及来自 get 函数的日志)。

但是我想做的是像这样实例化这个对象(并在构造函数中做一些初始化):

var myObj = new MyProxyFunction();
myObj.foo();

但是当我这样做时,我明白这foo()不是一个功能。为什么?以及如何在实例化代理时使其工作?

特里科特

该行为的解释是您的构造函数被代理,而不是它构造的对象。因此,当您编写new MyProxyFunction代理构造函数时,会调用该构造函数,但该构造函数创建了一个与 无关的新对象Proxy,而是与prototype构造函数属性有关。

有几种方法可以使它工作。

1.在原型对象上应用代理

function MyProxyFunction() {
    console.log(">>>>>>>>>>>>>>>>>>>> constructor");
};

MyProxyFunction.prototype = new Proxy(MyProxyFunction.prototype, {
    get: function(target, prop) {
        if (target[prop] === undefined) {
            return function()  {
                console.log('an otherwise undefined function!!');
            };
        }
        else {
            return target[prop];
        }
    }
});

var myObj = new MyProxyFunction();
myObj.foo();
console.log('constructor:', myObj.constructor.name);
console.log('Is instance of MyProxyFunction?: ', myObj instanceof MyProxyFunction);

现在使用名称MyProxyFunction看起来有点奇怪,因为代理的不是函数(构造函数)本身。

2.为每个实例创建一个代理

如果你想要一个构造函数在你每次用它实例化一个对象时创建一个新的代理,那么不要new Proxy直接赋值MyProxyFunction,而是让它成为一个简单的构造函数,返回一个new Proxy.

然后您必须代理的对象是this.

function MyProxyFunction() {
    console.log(">>>>>>>>>>>>>>>>>>>> constructor");
    return new Proxy(this, {
        get: function(target, prop) {
            if (target[prop] === undefined) {
                return function()  {
                    console.log('an otherwise undefined function!!');
                };
            }
            else {
                return target[prop];
            }
        }
    });
}
var myObj = new MyProxyFunction();
myObj.foo();
console.log('constructor:', myObj.constructor.name);
console.log('Is instance of MyProxyFunction?: ', myObj instanceof MyProxyFunction);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在JavaScript中实例化QWebChannel对象时的警告

来自分类Dev

JavaScript对象未实例化

来自分类Dev

Javascript:使用链调用new实例化对象

来自分类Dev

在其声明中实例化的Javascript对象

来自分类Dev

Javascript中实例化对象的性能影响

来自分类Dev

Javascript中实例化对象的性能影响

来自分类Dev

Javascript-引用实例化的对象

来自分类Dev

使用angular.js时,在何处实例化javascript小部件/图表/实用程序?

来自分类Dev

Javascript 类实例化

来自分类Dev

无法在javascript(node.js)中实例化对象

来自分类Dev

Javascript对象实例化大小和方法的巨大性能差异

来自分类Dev

复制和修改用于实例化javascript的相似对象

来自分类Dev

引导选择javascript实例化不会创建对象

来自分类Dev

JavaScript中的函数与对象以及没有函数的实例化

来自分类Dev

是否可以在TypeScript中实例化JavaScript对象?

来自分类Dev

如何实例化新文件对象的javascript

来自分类Dev

for...in 键值实例化对象而不是 JavaScript 中的 forEach

来自分类Dev

Javascript:如何获取实例化某个对象的类?

来自分类Dev

使用代理对象检测Javascript数组中的更改

来自分类Dev

使用Javascript / jquery侦听布尔值更改(代理对象)

来自分类Dev

在JavaScript中创建对象的多个实例时出错

来自分类Dev

Javascript类:实例化类时的getter值

来自分类Dev

为什么 JavaScript 在使用对象作为键时隐式字符串化参数值?

来自分类Dev

使用JavaScript中的if语句的对象实例的简单循环

来自分类Dev

Javascript:在对象实例方法上使用apply()方法失败

来自分类Dev

使用jQuery $ .each()遍历JavaScript对象的每个实例

来自分类Dev

使用Javascript获取对象实例的变量值

来自分类Dev

用Javascript传递对象的实例

来自分类Dev

JavaScript“不是函数”-对象实例

Related 相关文章

  1. 1

    在JavaScript中实例化QWebChannel对象时的警告

  2. 2

    JavaScript对象未实例化

  3. 3

    Javascript:使用链调用new实例化对象

  4. 4

    在其声明中实例化的Javascript对象

  5. 5

    Javascript中实例化对象的性能影响

  6. 6

    Javascript中实例化对象的性能影响

  7. 7

    Javascript-引用实例化的对象

  8. 8

    使用angular.js时,在何处实例化javascript小部件/图表/实用程序?

  9. 9

    Javascript 类实例化

  10. 10

    无法在javascript(node.js)中实例化对象

  11. 11

    Javascript对象实例化大小和方法的巨大性能差异

  12. 12

    复制和修改用于实例化javascript的相似对象

  13. 13

    引导选择javascript实例化不会创建对象

  14. 14

    JavaScript中的函数与对象以及没有函数的实例化

  15. 15

    是否可以在TypeScript中实例化JavaScript对象?

  16. 16

    如何实例化新文件对象的javascript

  17. 17

    for...in 键值实例化对象而不是 JavaScript 中的 forEach

  18. 18

    Javascript:如何获取实例化某个对象的类?

  19. 19

    使用代理对象检测Javascript数组中的更改

  20. 20

    使用Javascript / jquery侦听布尔值更改(代理对象)

  21. 21

    在JavaScript中创建对象的多个实例时出错

  22. 22

    Javascript类:实例化类时的getter值

  23. 23

    为什么 JavaScript 在使用对象作为键时隐式字符串化参数值?

  24. 24

    使用JavaScript中的if语句的对象实例的简单循环

  25. 25

    Javascript:在对象实例方法上使用apply()方法失败

  26. 26

    使用jQuery $ .each()遍历JavaScript对象的每个实例

  27. 27

    使用Javascript获取对象实例的变量值

  28. 28

    用Javascript传递对象的实例

  29. 29

    JavaScript“不是函数”-对象实例

热门标签

归档