web-dev-qa-db-fra.com

Comment créez-vous une méthode pour un objet personnalisé en JavaScript?

Est-ce que c'est comme ...

var obj = new Object();

obj.function1 = function(){
    //code
}

ou quelque chose comme ça?

50
BigOmega
var newObj = {
    met1 : function () {
        alert('hello');
    }
};

Ensuite, la méthode peut s'appeler comme ceci: 

newObj.met1();

Btw, lors de la déclaration d'un nouvel objet, utilisez le littéral d'objet ({}) et non le constructeur new Object().

52
Andreas Grech

Vous pouvez voir d'après les réponses que vous avez déjà qu'il y a plus d'un moyen. 

#1
var o = new Object();
o.method = function(){}

#2
var o = new Object();
o.prototype.method = function(){}

#3
function myObject() {
    this.method = function(){}
}
var o = new myObject();

#4
function myObject() {}
myObject.prototype.method = function(){}
var o = new myObject();

#5
var o = {
    method: function(){}
}

Les n ° 3 et n ° 4 utilisent une fonction constructeur. cela signifie que vous pouvez les utiliser pour créer un certain nombre d'objets de la même "classe" (les classes n'existent pas vraiment en JavaScript)

Le n ° 4 est différent du n ° 3 car tous les objets construits avec le n ° 4 partageront une méthode 'méthode' identique car il s'agit d'une propriété de leur prototype. Cela économise de la mémoire (mais très peu) et si vous modifiez la méthode du prototype, tous les objets # 4 seront immédiatement mis à jour, même s'ils ont déjà été instanciés. 

N ° 1, n ° 2 et n ° 5 sont à peu près équivalents. En effet, il n’y aura probablement jamais qu’un seul d’entre eux à la fois. Par conséquent, le fait que la méthode N ° 2 ait été ajoutée au prototype n’a pas vraiment d’importance. (sans tenir compte du clonage) 

Il y a encore plus de moyens d'ajouter des méthodes à des objets en utilisant des fabriques avec fermeture ou d'ajouter des propriétés/méthodes 'statiques' à des fonctions ou des fonctions imbriquées privées ... :)

88
meouw

Utilisez généralement le prototype property:

function YourObject()
{
    //
}

YourObject.prototype.yourMethod= function()
{
   //
}

Une chose que je n'ai encore vu personne mentionner est la raison pour laquelle vous pourriez vouloir utiliser la propriété prototype sur, disons, la notation littérale-objet: cela permet de garantir que la définition de la fonction est partagée entre toutes les instances des objets créés à partir de votre prototype de fonction, plutôt que qu'une fois par instanciation.

13
Christian Nunciato

Ne vous inquiétez pas mon frère, voici le code:

  var myObj=function(){
      var value=null

     this.setValue=function(strValue){

     this.value=strValue;
     };

     this.getValue=function(){
     return this.value;
     };    
};

Vous pouvez appeler cet objet comme ceci:

    var obj= new myObj();
    obj.setValue("Hi!");
    alert(obj.getValue());
2
Ranjeet Rana

Avec es6 vous pouvez le faire comme ceci: 

var a = {
    func(){
        return 'The value';
    }
}
    
document.getElementById('out').innerHTML = a.func();
   
<div id="out"></div>

1
msangel

Function.prototype.implement = function(member, value) {
   this[member] = value;
   return this;
}

function MyFunction() {
 //...
}

(function($){

 $.implement("a", "blabla")
 .implement("b", function(){ /* some function */ })
 .implement("c" {a:'', b:''});

})(MyFunction);
1
Barry

Vous pouvez également effectuer les opérations suivantes au lieu d'utiliser la méthode "Object.create ()".

Appel de fonction:

com.blah.MyChildObj.prototype = createObject(com.blah.MyParentObj.prototype, 
    com.blah.MyChildObj);

Définition de la fonction:

function createObject(theProto, theConst) {
    function x() {};
    x.prototype = theProto;
    x.prototype.constructor = theConst;
    return new x();
}
0
specialk1st