Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6845357
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 27, 20262026-05-27T00:29:27+00:00 2026-05-27T00:29:27+00:00

I’m currently going through Stoyan Stefanov’s book Object-oriented JavaScript and I’ve stumbled on an

  • 0

I’m currently going through Stoyan Stefanov’s book “Object-oriented JavaScript” and I’ve stumbled on an interesting problem. Here’s the code:

var shape = {
    type: 'shape',
    getType: function() {
        return this.type;
    }
};

function Triangle(a, b, c) {
    this.a = a;
    this.b = b;
    this.c = c;
    this.type = 'triangle';
}

Triangle.prototype = shape; // changing the prototype object
Triangle.prototype.getPerimeter = function() {
    return this.a + this.b + this.c;
}

var t = new Triangle(1, 2, 3);
t.constructor; // logs Object() instead of Triangle(a, b, c)

As you can see, here is a simple example of the constructor inhereting some properties from the prototype object. But the constructor property of object t points to the Object() object instead of Triangle(a, b, c), as it should have. If I comment the line with the prototype change, though, everything works fine. What’s my problem?
(Reread the whole prototype chapter in Object-oriented Javascript and JavaScript Patterns, couldn’t find an answer).
P.S. Sorry for my bad English, trying to practice it. 🙂

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-27T00:29:27+00:00Added an answer on May 27, 2026 at 12:29 am

    I will explain your code in two parts. Firstly, what is the constructor property actually? Secondly, why doesn’t it return Objects in your code?

    The constructor property and Stoyan’s mistake:

    In Stoyan Stefanov’s book, p150, he states:

    prototype is a property that gets created as soon as you define the function. Its initial value is an empty object.

    It is wrong. According to the JavaScript Definitive Guide Section 9.2

    The initial value of the prototype property is an object with a single property. This property is named constructor and refers back to the constructor function with which the prototype is associated.

    You can test it with Triangle.prototype.constructor. It has been set when the function is defined.

    Conclusion 1: the constructor is in fact the property of Constructor.prototype. In your case, it is Triangle.prototype.constructor.

    All the instances of Triangle could access this property through the prototype chain. But these objects themselves don’t have the constructor property. The following code proves it:

    function Triangle(a, b, c) {
        this.a = a;
        this.b = b;
        this.c = c;
        this.type = 'triangle';
    }
    var t = new Triangle(1, 2, 3);
    t.hasOwnProperty('constructor');
    >>false
    t.__proto__.hasOwnProperty('constructor');
    >>true
    

    Conclusion 2: when you access the constructor property of an instance, you get them from the prototype chain.

    Why is it not working as you expected

    You set Triangle.prototype to shape which doesn’t contain the originalconstructor property.

    Thus, this time, when you query t.constructor, it will resolve it in the following process:

    1. Look at it’s own properties and find no constructor
    2. Keep looking up to t.__proto__, which is Triangle.prototype. You have set it to shape which doesn’t contain the constructor property.
    3. Continue looking up along the prototype chain – t.__proto__.__proto__. It is Triangle.prototype.__proto__, and it is resolved as Object.prototype. Object.prototype has the constructor property and it refers to Object.
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I am currently running into a problem where an element is coming back from
I ran into a problem. Wrote the following code snippet: teksti = teksti.Trim() teksti
I am reading a book about Javascript and jQuery and using one of the
link Im having trouble converting the html entites into html characters, (&# 8217;) i
I used javascript for loading a picture on my website depending on which small
I want use html5's new tag to play a wav file (currently only supported
I'm parsing an RSS feed that has an ’ in it. SimpleXML turns this
I have this code: - (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock { NSString *someString = [[NSString
I'm trying to decode HTML entries from here NYTimes.com and I cannot figure out
i got an object with contents of html markup in it, for example: string

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.