zoukankan      html  css  js  c++  java
  • [Javascript] Understanding the .constructor property on JavaScript Objects

    Constructor functions hold an interesting purpose in JavaScript. Unlike in classical languages, they do not always mean created by. In this lesson we’ll use the new keyword to make a constructor call and work with the .constructor property.

    When we define a function:

    function Foo(){
        //.
    }

    It has one prototype prop defined which is constructor. And it points to the Foo function itself.

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

    And if we have an instance created by new keyword:

    const f= new Foo();

    Then:

    console.log(f.constructor === Foo) // true

    So which mean:

    f.constructor === Foo.prototype.constructor

    This prototype chain can be broken when we reassgin the Foo.prototype = {}:

    Foo.prototype = {}; // now we reassign to an empty object.
    console.log(Foo.prototype.constructor === Foo);  // false
    console.log(f.constructor === Foo); //true
    console.log(f.constructor === Foo.prototype.constructor); // false

    We can use Object.defineProperty to reassign the constructor to the Foo.prototype:

    Foo.prototype = {};
    Object.defineProperty(Foo.prototype, "constructor", {
      enumerable: false,
      writable: true,
      configurable: true,
      value: Foo
    });
    
    console.log(Foo.prototype.constructor === Foo); // true
    console.log(f.constructor === Foo); // true
    console.log(f.constructor === Foo.prototype.constructor); // true
  • 相关阅读:
    从首页看CCS布局
    Community Server专题一:概述Community Server
    datagrid程序增加列的方法
    类的关键字
    base 关键字用于从派生类中访问基类的成员:
    关于CS1.1后台管理页面的研究
    如何:创建同步 HTTP 处理程序
    Community Server专题二:体系结构
    SqlTransaction 类
    单继承与多实现
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9816917.html
Copyright © 2011-2022 走看看