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

  • Home
  • SEARCH
  • 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 6372003
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 25, 20262026-05-25T01:10:23+00:00 2026-05-25T01:10:23+00:00

I have three coffeescript classes, set up like this: class A class C extends

  • 0

I have three coffeescript classes, set up like this:

class A
class C extends A
class B

so that the prototype chain looks like this:

A -> C
B

and I need the prototype chain to look like this:

A -> B -> C

The catch being that I can’t touch the definitions of A and C.

What I’d like to do is make an inject function that can be called like this:

inject B, C

that injects B into C’s prototype chain before A, and then set up B’s prototype chain to whatever C’s was before the injection.

I thought this would be simple, something like

C extends (B extends C.prototype)

But unfortunately, things aren’t quite that simple, due to all the prototype/__super__ magic that coffeescript does. Does anyone know how to inject into the prototype chain such that it’s basically like you said class C extends B and class B extends A in the first place?

Many thanks.

Clarification: The below code DOES NOT WORK, because the properties fail to be copied over.

class A
  foo: 1
class B
  bar: 2
class C extends A
  baz: 3

B extends A
C extends B

c = new C
console.log c.foo
console.log c.bar
console.log c.baz
  • 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-25T01:10:24+00:00Added an answer on May 25, 2026 at 1:10 am

    [Update: I originally answered that C extends B; B extends A would work. This does indeed make C instanceof B and B instanceof A become true, but it doesn’t copy prototypal properties as desired. So, I’ve rewritten the answer.]

    Let’s walk through this:

    class A
      foo: 1
    class B
      bar: 2
    class C extends A
      baz: 3
    

    At this point, C::foo is 1 and C::baz is 3. If we then run

    C extends B
    

    that overwrites C‘s existing prototype with an instance of B (child.prototype = ...), so only C::bar is defined.

    This doesn’t happen when we use the class X extends Y syntax because properties are attached to X‘s prototype only after its prototype is overwritten. So, let’s write a wrapper around extends that saves existing prototype properties, then restores them:

    inherits = (child, parent) ->
      proto = child::
      child extends parent
      child::[x] = proto[x] for own x of proto when x not of child::
      child
    

    Applying this to our example:

    inherits B, A
    inherits C, B
    
    console.log new C instanceof B, new B instanceof A  # true, true
    console.log B::foo, B::bar, B::baz  # 1, 2, undefined
    console.log C::foo, C::bar, C::baz  # 1, 2, 3
    

    If you’d like to learn more about the inner workings of CoffeeScript classes, you might want to check out my book on CoffeeScript, published by the fine folks at PragProg. 🙂

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a working coffeescript/backbone idiom that looks like this: SidebarWidgets = ((() ->
I have three tables: page, attachment, page-attachment I have data like this: page ID
I have three classes mapped using the table-per-subclass class mapping strategy. The tables are:
I have three models: class ReleaseItem < ActiveRecord::Base has_many :pack_release_items has_one :pack, :through =>
I have three unordered lists that have been created as Scriptaculous Sortables so that
I have three (C++) classes: Player, Hand, and Card. Player has a member, hand,
I have three values I need to align in a dropdown box. How can
I have three classes which implement the same protocol, and have the same parent
I have three models that I want to interact with each other. Kase, Person
I have three tables, table one (tableA) containing users data like name and email,

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.