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

constructor, prototype 很让人蒙逼

  •  
  •   lbfeng · 31 天前 · 892 次点击
    这是一个创建于 31 天前的主题,其中的信息可能已经有所发展或是发生改变。
    function A(a) {
      this.a = a;
    }
    
    console.log(A.constructor);  // function Function() { [native code] }
    console.log(A.prototype);    // {}
    console.log(A.prototype.constructor);  // function A(a){this.a=a;}
    
    let a = new A(1);
    
    console.log(a.__proto__)     // {}
    console.log(a.constructor);  // function A(a){this.a=a;}
    

    A.prototype 是 Object, Object 的 constructor 居然是 A。实在不能理解

    6 回复  |  直到 2019-07-25 17:03:43 +08:00
        1
    yuanfnadi   31 天前
    只要创建了一个函数,那么该函数会有一个 `prototype` 的属性,这个属性指向函数的原型对象。
    所有原型对象都会有自动获得一个 `constructor` 的属性。这个属性包含一个指向 `prototype` 属性所在函数的指针。、

    function Person() {
    }

    console.log(Person.prototype.constructor === Person) //true


    创建自定义构造函数,其原型对象只会取得 `constructor` 属性,其他方法都是由 Object 继承而来。每当调用构造函数创建一个新实例后,该实例都将包含一个指针,指向构造函数的原型对象。在 `ECMA-262` 第 5 版中管这个指针叫 `[[Prototype]]`,在 Firefox Safari Chrome,每一个对象都支持一个属性 `__proto__`。
        2
    yuanfnadi   31 天前
    来自于 JavaScript 高级程序设计 6.2.3 原型模式
        3
    lbfeng   31 天前
    @yuanfnadi 好书,就是内容太多了。得抽空好好读下。
        4
    marcong95   30 天前
    因为你没往 A.prototype 上面挂东西,那 A.prototype、a.__proto__自然就是个{}
    然后 a 是 new A(1)产生的,所以 A 是 a 的 constructor 也挺顺理成章的。
    JS 的 new 运算符后面跟的是一个 Function,表示以这个 Function 作为 constructor 创建一个对象。
        5
    Yokira   30 天前
    推荐一个老哥讲解 JS 原型和闭包相关的文章,很详细,https://www.cnblogs.com/wangfupeng1988/p/3977924.html
        6
    MinonHeart   24 天前 via iPhone
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4007 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 44ms · UTC 01:47 · PVG 09:47 · LAX 18:47 · JFK 21:47
    ♥ Do have faith in what you're doing.