zoukankan      html  css  js  c++  java
  • 你不知道的 JavaScript 系列上( 51 ) - 假构造函数

    function Foo() {
      // ...
    }
    var a = new Foo();

    是什么让我们认为 Foo 是一个类,Foo() 是构造函数调用。其中一个原因是我们看到了关键字 new。

    除了令人迷惑的构造函数语义外,Foo.prototype 还有另一个绝招
    function Foo() {
      // ...
    }
    Foo.prototype.constructor === Foo; // true
    var a = new Foo();
    a.constructor === Foo; // true

    Foo.prototype 默认有一个公有并且不可枚举的属性 constructor,这个属性引用的是对象关联的函数,本例是 Foo。此外,a 也有一个 constructor 属性,指向创建这个对象的函数。

    实际上 a 本身并没有 constructor 属性。而且,虽然 a.constructor 确实指向 Foo 函数,但是这个属性并不表示 a 是由 Foo 构造。
    类名首字母要大写,所以名字写作 Foo 而不是 foo,如果不大写,许多 JS 开发者都会责怪你,amazing。我们竟然这么努力地维护这个假类。
    很容易认为 Foo 是一个构造函数,因为我们使用 new 来调用他并且看到他构造了一个对象。实际上,Foo 和程序中的其他函数没有任何区别。但是使用 new 调用时,它就会构造一个对象并赋值给 a。但是 Foo 本身并不是一个构造函数
    换句话说,在 JS 中对于构造函数最准确的解释是,所有带 new 的函数调用。函数不是构造函数,但是当且仅当使用 new 时,函数调用会变成构造函数调用
  • 相关阅读:
    03-字典
    02-列表
    01-字符串操作
    Django中的跨域问题
    Codeforces Round #617 (Div. 3) A
    Codeforces Round #717 (Div. 2) A
    如何在Vuespa中使用less
    excle导出
    ajaxFileUpload上传文件
    图片插入word
  • 原文地址:https://www.cnblogs.com/wzndkj/p/12695505.html
Copyright © 2011-2022 走看看