Czy podoba ...Jak utworzyć metodę dla obiektu niestandardowego w JavaScript?
var obj = new Object();
obj.function1 = function(){
//code
}
czy coś takiego?
Czy podoba ...Jak utworzyć metodę dla obiektu niestandardowego w JavaScript?
var obj = new Object();
obj.function1 = function(){
//code
}
czy coś takiego?
var newObj = {
met1 : function() {
alert('hello');
}
};
Następnie, sposób może być nazywany jak np:
newObj.met1();
okazji, w przypadku podania nowego obiektu, należy przedmiot dosłownego ({}
) nie konstruktora new Object()
.
Ogólnie użyć właściwości prototype:
function YourObject()
{
//
}
YourObject.prototype.yourMethod= function()
{
//
}
Jedno nie widziałem jeszcze ktoś wspomnieć, dlaczego warto skorzystać z właściwości prototype
ciągu, powiedzmy, notacja obiektowo dosłowny: robić to gwarantuje Definicja funkcji jest udostępniana we wszystkich instancjach obiektów utworzonych na podstawie prototypu funkcji, a nie raz na instancję.
Uh, nie, właściwie to nie działa. Możesz dodać metody do obiektu, dodając je do prototypowej właściwości funkcji, a następnie tworząc ją, ale nie modyfikując właściwości o nazwie "prototyp" na instancji. – Shog9
Przepraszam, że o to mi chodziło, tak; Od samego rana koduję ActionScript. :) Poprawię. Hej i dzięki temu, kto mnie zawiódł; doceniać to. –
Jeez, idźcie łatwi ludzie - koncepcja jest absolutnie poprawna. –
Z odpowiedzi wynika, że masz już więcej niż jeden sposób.
#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 i # 4 używają funkcji konstruktora. oznacza to, że można ich użyć do utworzenia wielu obiektów tej samej "klasy" (klasy w rzeczywistości nie istnieją w JavaScript).
# 4 różni się od # 3, ponieważ wszystkie obiekty skonstruowane z # 4 będą miały identyczny Metoda "metoda", ponieważ jest własnością ich prototypu. Oszczędza to pamięć (ale tylko bardzo małą ilość) i jeśli zmienisz metodę prototypu, wszystkie obiekty # 4 zostaną natychmiast zaktualizowane - nawet jeśli zostały już utworzone.
# 1, # 2 i # 5 są w zasadzie równoważne. Jest tak dlatego, że prawdopodobnie będzie tylko jeden z nich na raz, więc fakt, że # 2 ma metodę dodaną do prototypu, nie ma znaczenia. (Nie biorąc pod uwagę klonowania)
Istnieje jeszcze więcej sposobów dodawania metod do obiektów korzystających z zamknięciem fabryki lub dodanie „statycznym” Właściwości/metod do funkcji lub prywatnych funkcji zagnieżdżonych ... :)
Jak zdefiniować metodę (na przykład 'hasClass') dla każdego elementu HTML? –
# 2 nie działa. Usuń go z odpowiedzi za pomocą 72 woluminów :-) – Bergi
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);
nie martw się bracie, tu jest kod:
var myObj=function(){
var value=null
this.setValue=function(strValue){
this.value=strValue;
};
this.getValue=function(){
return this.value;
};
};
można nazwać ten obiekt tak:
var obj= new myObj();
obj.setValue("Hi!");
alert(obj.getValue());
Możesz również wykonać następujące czynności zamiast korzystać z metody "Object.create()".
Wywołanie funkcji: definicja
com.blah.MyChildObj.prototype = createObject(com.blah.MyParentObj.prototype,
com.blah.MyChildObj);
Funkcja:
function createObject(theProto, theConst) {
function x() {};
x.prototype = theProto;
x.prototype.constructor = theConst;
return new x();
}
Z es6 można zrobić to tak:
var a = {
func(){
return 'The value';
}
}
document.getElementById('out').innerHTML = a.func();
<div id="out"></div>
"podczas deklarowania nowego obiektu należy użyć literału obiektowego (' {} '), a nie konstruktora' new Object() '. - Dlaczego tak jest? –
@ PaulD.Waite: Uważam, że nie ma logicznej różnicy, ale literały obiektów są bardziej zwarte, pozwalają na ustawienie właściwości w tym samym słowie i są na ogół bardziej akceptowanym sposobem na to (http://stackoverflow.com/q/ 4597926/1175459). – Sean
@Sean: gotcha, okrzyki. –