2009-02-02 7 views

Répondre

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

Ensuite, la méthode peut être appelée comme tel:

newObj.met1(); 

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

+4

"lors de la déclaration d'un nouvel objet, utilisez le littéral d'objet (' {} '), pas le constructeur' new Object() '." - Pourquoi ça? –

+6

@ PaulD.Waite: Je crois qu'il n'y a pas de différence logique, mais les littéraux d'objet sont plus compacts, permettent de définir des propriétés dans la même déclaration, et sont généralement la façon la plus acceptée de le faire (http://stackoverflow.com/q/ 4597926/1175459). – Sean

+0

@Sean: gotcha, à bientôt. –

13

utilisent généralement la propriété prototype:

function YourObject() 
{ 
    // 
} 

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

Une chose que je ne l'ai pas vu quelqu'un mentionner encore est la raison pour laquelle vous pouvez utiliser la propriété prototype sur, par exemple, la notation littérale objet: faire assure la 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 qu'une fois par instanciation.

+0

Euh, non, ça ne marche pas. Vous pouvez ajouter des méthodes à un objet en les ajoutant à la propriété prototype d'une fonction, puis en l'instanciant, mais pas en modifiant une propriété nommée "prototype" sur une instance. – Shog9

+2

Désolé, c'est ce que je voulais dire, oui; J'ai codé ActionScript toute la matinée. :) Je vais corriger. Hey et merci à celui qui m'a rabaissé; J'apprécie cela. –

+0

Jeez, allez les gens faciles - le concept est absolument correct. –

83

Vous pouvez voir à partir des réponses que vous avez déjà qu'il y a plus d'une façon.

#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(){} 
} 

# 3 et # 4 utilisent une fonction de 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)

# 4 est différent de # 3 parce que tous les objets construits aveC# 4 partageront un identique méthode 'method' car c'est une propriété de leur prototype. Cela économise de la mémoire (mais seulement une très petite quantité) et si vous changez la méthode du prototype, tous les objets # 4 seront immédiatement mis à jour - même s'ils ont déjà été instanciés.

# 1, # 2 et # 5 sont tous à peu près équivalents. C'est parce qu'il n'y en aura probablement jamais qu'un à la fois, donc le fait que la méthode # 2 ait ajouté la méthode au prototype n'a pas vraiment d'importance. (Ne prenant pas en compte le clonage)

Il y a encore plus de façons d'ajouter des méthodes à des objets en utilisant des usines avec la fermeture ou l'ajout de propriétés/méthodes « statiques » à des fonctions ou fonctions imbriquées privées ... :)

+0

Comment puis-je définir une méthode (par exemple 'hasClass') pour chaque élément HTML? –

+2

# 2 ne fonctionne pas. S'il vous plaît le retirer d'une réponse avec 72 upvotes :-) – Bergi

1

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); 
2

ne vous inquiétez pas bro, voici le code est:

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 celui-ci:

var obj= new myObj(); 
    obj.setValue("Hi!"); 
    alert(obj.getValue()); 
0

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

appel 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(); 
} 
1

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

Vous devriez mentionner que ce n'est pas ES5, et ne fonctionnera pas partout. – Bergi

+0

Voir [Comment fonctionne cette méthode de module sans le mot-clé "function"?] (Http://stackoverflow.com/q/32404617/1048572) – Bergi

+0

Oui, j'ai déjà trouvé – msangel

Questions connexes