Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting Error: Object doesn't support property or method 'assign'

I am using this jquery popup plugin from this link on my WordPress site. It's working fine on all browsers but giving the following error on IE11.

enter image description here

like image 358
pragya rai Avatar asked Feb 05 '16 02:02

pragya rai


2 Answers

As others have mentioned, the Object.assign() method is not supported in IE, but there is a polyfill available, just include it "before" your plugin declaration:

if (typeof Object.assign != 'function') {   Object.assign = function(target) {     'use strict';     if (target == null) {       throw new TypeError('Cannot convert undefined or null to object');     }      target = Object(target);     for (var index = 1; index < arguments.length; index++) {       var source = arguments[index];       if (source != null) {         for (var key in source) {           if (Object.prototype.hasOwnProperty.call(source, key)) {             target[key] = source[key];           }         }       }     }     return target;   }; } 

From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

Test page: http://jsbin.com/pimixel/edit?html,js,output (just remove the polyfill to get the same error you're getting on your page).

like image 132
Andres Ilich Avatar answered Sep 16 '22 13:09

Andres Ilich


@John Doe

I figured out from your comment that you want to implement this in node/react stack. This is very different from original question and you should have asked your own ;)
Anyways, Heres what you need to do...

You can use [es6-object-assign][1]. It is an ES6 Object.assign() "polyfill".

First, in package.json in your root folder, add es6-object-assign as a dependency:

"dependencies": {     "es6-object-assign": "^1.0.2",     "react": "^0.12.0",     ...   }, 

Then if you want to use it in node environment use:

require('es6-object-assign').polyfill(); 

If you are having the issue on front (browser) end...
Add it in your index.html file...

<script src="location_of_node_modules/es6-object-assign/dist/object-assign.min.js"></script> <script>   window.ObjectAssign.polyfill(); </script> 

location_of_node_modules depends on boilerplate you use, mostly just node_modules, but sometimes when index.html is in a subdirectory you need to use, ../node_modules

like image 41
shramee Avatar answered Sep 16 '22 13:09

shramee