{"id":39302,"date":"2025-11-17T12:33:25","date_gmt":"2025-11-17T20:33:25","guid":{"rendered":"https:\/\/cloudinary.com\/blog\/?p=39302"},"modified":"2025-12-12T15:23:20","modified_gmt":"2025-12-12T23:23:20","slug":"what-is-polymorphism-in-javascript","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/","title":{"rendered":"What is Polymorphism in JavaScript?"},"content":{"rendered":"\n<p>You have probably seen threads where someone asks how to design flexible JavaScript APIs that work with multiple object types without a forest of if statements. That topic usually lands on one core concept from object oriented programming and functional design: polymorphism.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Question:<\/h2>\n\n\n\n<p><em>Hi folks,<\/em><\/p>\n\n\n\n<p><em>I keep hearing about polymorphism in JavaScript, especially in relation to classes and \u201cduck typing.\u201d I use JS daily but I am not sure I can explain it clearly or choose the right pattern when building APIs.<\/em><\/p>\n\n\n\n<p><em>What is polymorphism in JavaScript? How does it work with classes and prototypes, what are practical patterns to emulate function overloading, and what are good examples or pitfalls to watch for?<\/em><\/p>\n\n\n\n<p><em>Thanks!<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Answer:<\/h2>\n\n\n\n<p>Polymorphism means \u201cmany forms.\u201d In code, it\u2019s one of the four pillars of object-oriented programming. It lets you write one interface and swap in different implementations without changing the calling code.<\/p>\n\n\n\n<p>JavaScript supports polymorphism through class inheritance, prototypal objects, and dynamic typing. The result is more extensible code and fewer conditionals scattered across your app. Let\u2019s break it down:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Class-Based Polymorphism (Subtype Polymorphism)<\/h3>\n\n\n\n<p>With classes, you define a common contract and let subclasses provide their own behavior. Callers depend on the contract, not the concrete type.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Shape<\/span> <\/span>{\n\u00a0 area() { <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(<span class=\"hljs-string\">\"Implement in subclass\"<\/span>); }\n}\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Rectangle<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Shape<\/span> <\/span>{\n\u00a0 <span class=\"hljs-keyword\">constructor<\/span>(w, h) { <span class=\"hljs-keyword\">super<\/span>(); <span class=\"hljs-keyword\">this<\/span>.w = w; <span class=\"hljs-keyword\">this<\/span>.h = h; }\n\u00a0 area() { <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">this<\/span>.w * <span class=\"hljs-keyword\">this<\/span>.h; }\n}\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Circle<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Shape<\/span> <\/span>{\n\u00a0 <span class=\"hljs-keyword\">constructor<\/span>(r) { <span class=\"hljs-keyword\">super<\/span>(); <span class=\"hljs-keyword\">this<\/span>.r = r; }\n\u00a0 area() { <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">Math<\/span>.PI * <span class=\"hljs-keyword\">this<\/span>.r * <span class=\"hljs-keyword\">this<\/span>.r; }\n}\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">printArea<\/span>(<span class=\"hljs-params\">shape<\/span>) <\/span>{\n\u00a0 <span class=\"hljs-comment\">\/\/ Works with any object that honors the Shape interface<\/span>\n\u00a0 <span class=\"hljs-built_in\">console<\/span>.log(shape.area().toFixed(<span class=\"hljs-number\">2<\/span>));\n}\n\n&#91; <span class=\"hljs-keyword\">new<\/span> Rectangle(<span class=\"hljs-number\">3<\/span>, <span class=\"hljs-number\">4<\/span>), <span class=\"hljs-keyword\">new<\/span> Circle(<span class=\"hljs-number\">2<\/span>) ].forEach(printArea);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">2. Duck Typing and Prototypes<\/h3>\n\n\n\n<p>In JavaScript, you do not need a class hierarchy. If an object has the right methods, treat it as compatible. This is duck typing: \u201cif it quacks like a duck\u2026\u201d<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-keyword\">const<\/span> sendPing = <span class=\"hljs-function\">(<span class=\"hljs-params\">target<\/span>) =&gt;<\/span> {\n\u00a0 <span class=\"hljs-keyword\">if<\/span> (target &amp;&amp; <span class=\"hljs-keyword\">typeof<\/span> target.send === <span class=\"hljs-string\">\"function\"<\/span>) {\n\u00a0 \u00a0 <span class=\"hljs-keyword\">return<\/span> target.send(<span class=\"hljs-string\">\"ping\"<\/span>);\n\u00a0 }\n\u00a0 <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">TypeError<\/span>(<span class=\"hljs-string\">\"Object must implement send(msg)\"<\/span>);\n};\n\n<span class=\"hljs-keyword\">const<\/span> WebSocketClient = { <span class=\"hljs-attr\">send<\/span>: <span class=\"hljs-function\">(<span class=\"hljs-params\">msg<\/span>) =&gt;<\/span> <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">\"ws:\"<\/span>, msg) };\n<span class=\"hljs-keyword\">const<\/span> MockClient = { <span class=\"hljs-attr\">send<\/span>: <span class=\"hljs-function\">(<span class=\"hljs-params\">msg<\/span>) =&gt;<\/span> <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">\"mock:\"<\/span>, msg) };\n\n&#91;WebSocketClient, MockClient].forEach(sendPing);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">3) Function &#8216;Overloading&#8217; Patterns in JS<\/h3>\n\n\n\n<p>JavaScript does not have traditional overloading, but you can branch on argument types or use an options object. Keep branches small and validated.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-comment\">\/\/ One function, multiple input shapes<\/span>\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">read<\/span>(<span class=\"hljs-params\">input<\/span>) <\/span>{\n\u00a0 <span class=\"hljs-keyword\">if<\/span> (<span class=\"hljs-keyword\">typeof<\/span> input === <span class=\"hljs-string\">\"string\"<\/span>) {\n\u00a0 \u00a0 <span class=\"hljs-keyword\">return<\/span> fetch(input).then(<span class=\"hljs-function\"><span class=\"hljs-params\">r<\/span> =&gt;<\/span> r.text());\n\u00a0 }\n\u00a0 <span class=\"hljs-keyword\">if<\/span> (input <span class=\"hljs-keyword\">instanceof<\/span> Blob) {\n\u00a0 \u00a0 <span class=\"hljs-keyword\">return<\/span> input.text();\n\u00a0 }\n\u00a0 <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">TypeError<\/span>(<span class=\"hljs-string\">\"read accepts a URL string or a Blob\"<\/span>);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>Prefer small, well-named helpers over one giant switch.<\/li>\n\n\n\n<li>Validate types at runtime, and document supported shapes.<\/li>\n\n\n\n<li>Consider TypeScript to make contracts explicit.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4. Strategy Pattern: Plug Different Behaviors Behind 1 Interface<\/h3>\n\n\n\n<p>The Strategy pattern is a practical use of polymorphism. Define a shared interface, then swap strategies at runtime without changing callers.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Thumbnailer<\/span> <\/span>{\n\u00a0 make(<span class=\"hljs-comment\">\/* asset *\/<\/span>) { <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(<span class=\"hljs-string\">\"Implement in subclass\"<\/span>); }\n}\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">LocalThumbnailer<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Thumbnailer<\/span> <\/span>{\n\u00a0 make(asset) { <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">`file:\/\/<span class=\"hljs-subst\">${asset.path}<\/span>`<\/span>; }\n}\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">CloudThumbnailer<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Thumbnailer<\/span> <\/span>{\n\u00a0 <span class=\"hljs-comment\">\/\/ Example URL-based thumbnail; the caller does not care how it is built<\/span>\n\u00a0 make(asset) {\n\u00a0 \u00a0 <span class=\"hljs-keyword\">const<\/span> base = <span class=\"hljs-string\">\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/\"<\/span>;\n\u00a0 \u00a0 <span class=\"hljs-keyword\">const<\/span> t = <span class=\"hljs-string\">\"c_fill,w_300,h_300,q_auto,f_auto\"<\/span>;\n\u00a0 \u00a0 <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">`<span class=\"hljs-subst\">${base}<\/span><span class=\"hljs-subst\">${t}<\/span>\/<span class=\"hljs-subst\">${asset.publicId}<\/span>.<span class=\"hljs-subst\">${asset.ext}<\/span>`<\/span>;\n\u00a0 }\n}\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">buildThumbnails<\/span>(<span class=\"hljs-params\">assets, service<\/span>) <\/span>{\n\u00a0 <span class=\"hljs-keyword\">return<\/span> assets.map(<span class=\"hljs-function\"><span class=\"hljs-params\">a<\/span> =&gt;<\/span> service.make(a));\n}\n\n<span class=\"hljs-keyword\">const<\/span> assets = &#91;\n\u00a0 { <span class=\"hljs-attr\">publicId<\/span>: <span class=\"hljs-string\">\"sample\"<\/span>, <span class=\"hljs-attr\">ext<\/span>: <span class=\"hljs-string\">\"jpg\"<\/span>, <span class=\"hljs-attr\">path<\/span>: <span class=\"hljs-string\">\"\/tmp\/sample.jpg\"<\/span> },\n\u00a0 { <span class=\"hljs-attr\">publicId<\/span>: <span class=\"hljs-string\">\"logo\"<\/span>, <span class=\"hljs-attr\">ext<\/span>: <span class=\"hljs-string\">\"png\"<\/span>, <span class=\"hljs-attr\">path<\/span>: <span class=\"hljs-string\">\"\/tmp\/logo.png\"<\/span> }\n];\n\n<span class=\"hljs-built_in\">console<\/span>.log(buildThumbnails(assets, <span class=\"hljs-keyword\">new<\/span> LocalThumbnailer()));\n<span class=\"hljs-built_in\">console<\/span>.log(buildThumbnails(assets, <span class=\"hljs-keyword\">new<\/span> CloudThumbnailer()));<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Common Pitfalls and Tips<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Respect substitution: If A is expected, B should work if it follows A\u2019s contract.<\/li>\n\n\n\n<li>Prefer composition over deep inheritance trees.<\/li>\n\n\n\n<li>For format-specific behavior, isolate it behind interfaces. For example, JPEG vs PNG choices have tradeoffs like transparency support and compression; see <a href=\"https:\/\/cloudinary.com\/guides\/image-formats\/jpeg-vs-png\">this overview<\/a>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Applying the Same Idea With Cloudinary<\/h3>\n\n\n\n<p>If you manage media, a polymorphic design lets you swap processing backends. In the example above, the CloudThumbnailer returns an image URL that includes on-the-fly transformations. Since a Cloudinary URL is just an <a href=\"https:\/\/cloudinary.com\/glossary\/image-url\">image URL<\/a>, the rest of your app can treat it like any other source. You can decide at runtime which strategy to use based on deployment or content type, while still keeping a single interface.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">TL;DR<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Polymorphism lets one interface support multiple implementations.<\/li>\n\n\n\n<li>In JS you get it through classes, prototypes, and duck typing.<\/li>\n\n\n\n<li>Emulate overloading with type checks or options objects; validate inputs.<\/li>\n\n\n\n<li>Use the Strategy pattern to swap behaviors without changing callers, for example local vs. URL-based thumbnail generation.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Learn More<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/cloudinary.com\/tools\/image-to-webp\">Image to WebP converter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/cloudinary.com\/tools\/png-to-webp\">PNG to WebP<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/cloudinary.com\/tools\/image-upscale\">Image upscaling<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/cloudinary.com\/background-remover\">Background remover<\/a><\/li>\n<\/ul>\n\n\n\n<p>Ready to build faster, cleaner media workflows in your apps? <a href=\"https:\/\/cloudinary.com\/users\/register_free\">Create your free Cloudinary account<\/a> and start optimizing today.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>You have probably seen threads where someone asks how to design flexible JavaScript APIs that work with multiple object types without a forest of if statements. That topic usually lands on one core concept from object oriented programming and functional design: polymorphism. Question: Hi folks, I keep hearing about polymorphism in JavaScript, especially in relation [&hellip;]<\/p>\n","protected":false},"author":88,"featured_media":39267,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[423],"class_list":["post-39302","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-questions"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>What is Polymorphism in JavaScript?<\/title>\n<meta name=\"description\" content=\"You have probably seen threads where someone asks how to design flexible JavaScript APIs that work with multiple object types without a forest of if\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What is Polymorphism in JavaScript?\" \/>\n<meta property=\"og:description\" content=\"You have probably seen threads where someone asks how to design flexible JavaScript APIs that work with multiple object types without a forest of if\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-17T20:33:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-12T23:23:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"1999\" \/>\n\t<meta property=\"og:image:height\" content=\"1100\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"damjanantevski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/\"},\"author\":{\"name\":\"damjanantevski\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/43592e43c12520a1e867d456b1e8cf7e\"},\"headline\":\"What is Polymorphism in JavaScript?\",\"datePublished\":\"2025-11-17T20:33:25+00:00\",\"dateModified\":\"2025-12-12T23:23:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/\"},\"wordCount\":521,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA\",\"keywords\":[\"Questions\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/\",\"url\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/\",\"name\":\"What is Polymorphism in JavaScript?\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA\",\"datePublished\":\"2025-11-17T20:33:25+00:00\",\"dateModified\":\"2025-12-12T23:23:20+00:00\",\"description\":\"You have probably seen threads where someone asks how to design flexible JavaScript APIs that work with multiple object types without a forest of if\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA\",\"width\":1999,\"height\":1100},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What is Polymorphism in JavaScript?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/43592e43c12520a1e867d456b1e8cf7e\",\"name\":\"damjanantevski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3b40c995531fe4d510212a06c9d4fc666d2cb8efbfebc98a94191701accf4817?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3b40c995531fe4d510212a06c9d4fc666d2cb8efbfebc98a94191701accf4817?s=96&d=mm&r=g\",\"caption\":\"damjanantevski\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"What is Polymorphism in JavaScript?","description":"You have probably seen threads where someone asks how to design flexible JavaScript APIs that work with multiple object types without a forest of if","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/","og_locale":"en_US","og_type":"article","og_title":"What is Polymorphism in JavaScript?","og_description":"You have probably seen threads where someone asks how to design flexible JavaScript APIs that work with multiple object types without a forest of if","og_url":"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/","og_site_name":"Cloudinary Blog","article_published_time":"2025-11-17T20:33:25+00:00","article_modified_time":"2025-12-12T23:23:20+00:00","og_image":[{"width":1999,"height":1100,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA","type":"image\/jpeg"}],"author":"damjanantevski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/"},"author":{"name":"damjanantevski","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/43592e43c12520a1e867d456b1e8cf7e"},"headline":"What is Polymorphism in JavaScript?","datePublished":"2025-11-17T20:33:25+00:00","dateModified":"2025-12-12T23:23:20+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/"},"wordCount":521,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA","keywords":["Questions"],"inLanguage":"en-US","copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/","url":"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/","name":"What is Polymorphism in JavaScript?","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA","datePublished":"2025-11-17T20:33:25+00:00","dateModified":"2025-12-12T23:23:20+00:00","description":"You have probably seen threads where someone asks how to design flexible JavaScript APIs that work with multiple object types without a forest of if","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA","width":1999,"height":1100},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-polymorphism-in-javascript\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"What is Polymorphism in JavaScript?"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/43592e43c12520a1e867d456b1e8cf7e","name":"damjanantevski","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/3b40c995531fe4d510212a06c9d4fc666d2cb8efbfebc98a94191701accf4817?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3b40c995531fe4d510212a06c9d4fc666d2cb8efbfebc98a94191701accf4817?s=96&d=mm&r=g","caption":"damjanantevski"}}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/39302","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/88"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=39302"}],"version-history":[{"count":2,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/39302\/revisions"}],"predecessor-version":[{"id":39614,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/39302\/revisions\/39614"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/39267"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=39302"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=39302"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=39302"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}