Obtenir L'erreur: L'objet ne supporte pas la propriété ou la méthode 'assign'
9 réponses
comme d'autres l'ont mentionné, L'objet .assignez () la méthode N'est pas supportée dans IE, mais il y a un polyfill disponible, il suffit de l'inclure "avant" votre déclaration de plugin:
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;
};
}
de https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
page Test: http://jsbin.com/pimixel/edit?html,js, sortie (il suffit de supprimer le polyfill pour obtenir le même message d'erreur que vous obtenez sur votre page).
selon la documentation, objet.assign() est une nouvelle technologie, faisant partie de la norme ECMAScript 2015 (ES6)
https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/assign
et, il n'est pas soutenu par IE.
une solution possible à ce problème:
ajouter le script legacy.min.js avant la custombox.min.js
source: custombox projet github
@John Doe
j'ai compris à partir de votre commentaire que vous voulez implémenter ceci dans la pile node/react. C'est très différent de la question originale et vous auriez dû poser la vôtre ;)
De toute façon, Voici ce que vous devez faire...
Vous pouvez utiliser [es6-objet-assigner][1]. C'est un objet ES6.assign ()"polyfill".
D'abord, dans package.json
dans votre dossier racine, ajouter es6-object-assign
comme dépendance:
"dependencies": {
"es6-object-assign": "^1.0.2",
"react": "^0.12.0",
...
},
puis si vous voulez l'utiliser dans l'environnement node utiliser:
require('es6-object-assign').polyfill();
si vous avez le problème à l'avant (navigateur) fin...
Ajoutez-le dans votre index.fichier html...
<script src="location_of_node_modules/es6-object-assign/dist/object-assign.min.js"></script>
<script>
window.ObjectAssign.polyfill();
</script>
location_of_node_modules
dépend de boilerplate que vous utilisez, la plupart du temps juste node_modules
, mais parfois quand index.html est dans un sous-répertoire que vous devez utiliser, ../node_modules
@Andres-Ilich a la bonne réponse à votre question mais vous posez la mauvaise question:
pourquoi ne pas simplement utiliser un plugin jQuery qui supporte IE comme L'excellent Reveal de Zurb: https://github.com/zurb/reveal
il fera tout ce que vous voulez et ne pas jeter cette erreur.
travaille actuellement sur un jQuery popup moi-même: https://github.com/seahorsepip/jPopup
a tout ce que vous attendez d'un popup et plus :d
de toute façon de retour sur le sujet, je suis en train d'écrire la version 2 qui est une grande réécriture et ajoute le support pour IE6 (la version 1 était IE7+) et a couru dans une erreur similaire...
code Original qui a donné l'erreur dans IE6:
//Insane code for an insane browser
this._vars.fakeScrollbar = $("<div style=\"position:absolute;top:expression(document.documentElement.scrollTop);right:0;bottom:0;margin-left:-200px;width:0;overflow-y:scroll;height:expression(document.documentElement.clientHeight);z-index:9999999;\"></div>");
le
//Insane code for an insane browser
this._vars.fakeScrollbar = $("<div>");
this._vars.fakeScrollbar.html("<div style=\"position:absolute;top:expression(document.documentElement.scrollTop);right:0;bottom:0;margin-left:-200px;width:0;overflow-y:scroll;height:expression(document.documentElement.clientHeight);z-index:9999999;\"></div>");
this._vars.fakeScrollbar = this._vars.fakeScrollbar.children();
ces erreurs se produisent généralement lorsqu'un élément html id a le même id qu'une variable de la fonction JavaScript. Après avoir changé le nom de l'un d'eux le code a fonctionné.
Source : SCRIPT438: Objet ne prend pas en charge la propriété ou de la méthode c'est à dire
Autre lien : jquery validation IE Objet ne prend pas en charge la propriété
puisque vous avez étiqueté la question avec jQuery, vous pouvez utiliser la fonction extend de jQuery. Pas besoin de polyfill et ça fusionne profondément aussi.
Par Exemple:
var object1 = {
apple: 0,
banana: { weight: 52, price: 100 },
cherry: 97
};
var object2 = {
banana: { price: 200 },
durian: 100
};
// Merge object2 into object1
$.extend( object1, object2 );
résultat:
{"apple":0,"banana":{"price":200},"cherry":97,"durian":100}
essentiellement, Object.assign
n'est pas pris en charge par tous les navigateurs, cependant, il est possible de le réaffecter à Object
cas, il n'est pas pris en charge par le navigateur actuel.
il est pratique de faire une fonction de polyfill, qui se comporte de la même manière que Object.assign(target, ...)
de ES6.
je pense que la meilleure solution est d'itérer chaque argument après target
, attribuer chaque propriété de arguments
objets à target
, en considérant une itération entre les objets et les tableaux, pour éviter de créer des références. Optionnellement, pour ne pas perdre les instances , vous pouvez détecter si la dernière instance de la propriété est seulement égale à "Array"
ou "Object"
, et en faisant cela vous ne perdrez pas une interface Image
(E. g) Si vous prévoyez de créer de nouvelles références, mais les objets avec ces instances seront toujours des références.
Modifier : l'original Object.assign
ne fonctionne pas de cette façon.
Selon cette solution, j'ai mon propre polyfill qui peut être trouvé ici .