3 votes

Javascript : Pourquoi les objets littéraux ne peuvent-ils pas utiliser l'assignation ?

En Javascript, Object a une fonction assign fonction. Étant donné qu'un littéral d'objet possède un __proto__ de Object.prototype Pourquoi un objet littéral ne peut-il pas utiliser assign et doit passer directement par l'objet ?

Object.assign({}, {hello: 'world'})

const o = {};
o.assign({add: 'more stuff'})

3voto

Will P. Points 2111

Le prototype Object ne dispose pas de la méthode assign sur celui-ci. Ouvrez la console F12 et tapez Object.prototype pour voir ce qui est disponible dans le prototype de l'objet de base.

Object.assign est considérée comme une méthode statique et non comme une méthode d'instance.

1voto

ibrahim mahrir Points 22237

C'est parce que assign est en quelque sorte une fonction statique. Elle n'est pas définie dans le prototype.

En voici un exemple :

function SomeClass(foo) {
  this.foo = foo;
}

// this is a method, it is attached to the prototype
SomeClass.prototype.showFoo = function() {
  console.log(this.foo);
}

// this is a static method, it is not attached to the prototype
SomeClass.bar = function() {
  console.log("bar");
}

var instance = new SomeClass("foo");

console.log(instance.showFoo);       // OK
console.log(instance.bar);           // not OK

console.log(SomeClass.showFoo);      // not OK
console.log(SomeClass.bar);          // OK

0voto

Franchy Points 122

Les assign n'est pas dans la propriété prototype de Object et que seules les propriétés et les méthodes définies sur ce dernier sont accessibles aux objets créés :

Object.prototype.assign = function(){}; // this create a function called assign in the prototype property of Object
var obj = {};
obj.assign(); // Now we can access the assign function with the object literal

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X