Est-ce que c'est comme ...
var obj = new Object();
obj.function1 = function(){
//code
}
ou quelque chose comme ça?
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()
.
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 ... :)
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.
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());
Avec es6 vous pouvez le faire comme ceci:
var a = {
func(){
return 'The value';
}
}
document.getElementById('out').innerHTML = a.func();
<div id="out"></div>
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);
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();
}