web-dev-qa-db-de.com

Wie erstellen Sie eine Methode für ein benutzerdefiniertes Objekt in JavaScript?

Ist es wie ...

var obj = new Object();

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

oder sowas ähnliches?

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

Dann kann die Methode wie folgt aufgerufen werden: 

newObj.met1();

Übrigens, wenn Sie ein neues Objekt deklarieren, verwenden Sie das Objektliteral ({}), nicht den new Object()-Konstruktor.

52
Andreas Grech

Sie können aus den Antworten, die Sie bereits haben, erkennen, dass es mehr als einen Weg gibt. 

#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 und # 4 verwenden eine Konstruktorfunktion. Das bedeutet, dass Sie sie verwenden können, um eine Reihe von Objekten derselben 'Klasse' zu erstellen (Klassen existieren in JavaScript nicht wirklich).

# 4 unterscheidet sich von # 3, da alle mit # 4 erstellten Objekte eine identische Methode haben, da es sich um eine Eigenschaft ihres Prototyps handelt. Dies spart Speicher (aber nur eine sehr kleine Menge). Wenn Sie die Methode des Prototyps ändern, werden alle # 4-Objekte sofort aktualisiert - auch wenn sie bereits instanziiert wurden. 

# 1, # 2 und # 5 sind alle ziemlich gleichwertig. Dies liegt daran, dass es wahrscheinlich immer nur jeweils eine davon geben wird, und daher spielt es keine Rolle, ob die Methode Nr. 2 zum Prototyp hinzugefügt wurde. (Klonen nicht berücksichtigen) 

Es gibt noch mehr Möglichkeiten, Objekten mithilfe von Fabriken mit Schließung Methoden hinzuzufügen oder statische Eigenschaften/Methoden zu Funktionen oder privaten verschachtelten Funktionen hinzuzufügen ... :)

88
meouw

Verwenden Sie im Allgemeinen die prototype property:

function YourObject()
{
    //
}

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

Ich habe bisher noch nicht erwähnt, dass jemand die prototype -Eigenschaft über die Objekt-Literal-Notation verwenden möchte. Dadurch wird sichergestellt, dass die Funktionsdefinition für alle Instanzen der Objekte verwendet wird, die mit Ihrem Funktionsprototyp erstellt wurden als einmal pro Instanziierung.

13

Mach dir keine Sorgen bro, hier ist der Code:

  var myObj=function(){
      var value=null

     this.setValue=function(strValue){

     this.value=strValue;
     };

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

Sie können dieses Objekt folgendermaßen aufrufen:

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

Mit es6 können Sie das so machen: 

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

Sie können anstelle der Methode "Object.create ()" auch Folgendes tun.

Funktionsaufruf:

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

Funktionsdefinition:

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