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
  • 相关阅读:
    选择HttpHandler还是HttpModule?
    细说 ASP.NET Cache 及其高级用法
    写自己的ASP.NET MVC框架(下)
    写自己的ASP.NET MVC框架(上)
    细说Cookie
    用Asp.net写自己的服务框架
    我心目中的Asp.net核心对象
    HttpModule与HttpHandler详解
    对协变和逆变的简单理解
    .net项目技术选型总结
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9816917.html
Copyright © 2011-2022 走看看