V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
KyL
V2EX  ›  JavaScript

作为 JavaScript 的一个内置函数,为什么 Proxy 没有 prototype 这个属性?

  •  
  •   KyL · 2020-10-03 22:51:55 +08:00 · 2622 次点击
    这是一个创建于 1516 天前的主题,其中的信息可能已经有所发展或是发生改变。

    var proxy = new Proxy(target, handler);

    console.log(Proxy.prototype);

    Proxy 是一个方法,可是我在 Chrome 中尝试访问 Proxy.prototype 却为 undefined,在 node 中为 null 。Proxy 这个函数有什么特别之处?

    3 条回复    2020-10-12 15:24:38 +08:00
    aaronlam
        1
    aaronlam  
       2020-10-03 23:39:04 +08:00
    首先构造方法的 prototype 不一定是为对象的呀,可以置为 null 的

    另外可以看下 ECMA 对于 Proxy 构造函数的规范:
    http://www.ecma-international.org/ecma-262/#sec-proxy-constructor

    26.2.2 Properties of the Proxy Constructor
    ·has a [[Prototype]] internal slot whose value is %Function.prototype%.
    ·does not have a "prototype" property because proxy exotic objects do not have a [[Prototype]]
    internal slot that requires initialization.

    由于 Proxy 构造出来的实例对象是对 target 的一个代理,所以 Proxy 在构造过程中是不需要 prototype 进行初始化的。
    另外我记得正常的构造函数在 new 运算的时候,是首先会取构造函数的 prototype 去构建一个实例,然后再传入构造函数内充当 this,再就是构造函数进行初始化。
    xionger
        2
    xionger  
       2020-10-04 10:28:17 +08:00 via Android
    还没有用过
    libook
        3
    libook  
       2020-10-12 15:24:38 +08:00
    对象基本由数据和功能两部分组成,在构造函数创建对象的过程中,构造函数本身的过程实际上是在构造对象的数据部分,而 prototype 其实相当于对象的功能部分,而 Proxy 构造函数产生的对象所具备的功能并不来自于 Proxy 类自己所定义的功能,而是开发者想代理的对象的功能,所以对于 Proxy 来说,没必要存在它自己的 prototype 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3370 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 11:49 · PVG 19:49 · LAX 03:49 · JFK 06:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.