2009-08-08 12 views
5

अगर मैं की तरह एक वस्तु निर्माता है: सभी बिल्लियों मैं के माध्यम सेका javascript ऑब्जेक्ट के सभी उदाहरणों के माध्यम से लूपिंग

var fluffball = new cat("blue","male"); 
var shiznitz = new cat("red","male"); 
var slothersburger = new cat("green","female"); 

यह पाश करना संभव है:

function cat(color, sex){ 
    this.color = color; 
    this.sex = sex; 
} 

और मैं कुछ बिल्लियों बनाने घोषित? कुछ ऐसा:

var current_cat; 
for(current_cat in document.cat){ 
    alert(current_cat.color); 
} 

हालांकि यह काम नहीं करता है। क्या लोग आम तौर पर सभी बिल्ली वस्तुओं को सरणी में स्टोर करते हैं? या व्यक्तिगत बिल्लियों की एक सरणी युक्त एक अन्य वस्तु बनाएं:

function all_cats(){ 
    this.the_cats = new Array(); 
} 

किसी भी सुझाव के लिए धन्यवाद!

उत्तर

0

आप उन्हें सरणी में भंडारण मतलब, उनमें से सभी के माध्यम से जाना चाहते हैं ..

वर बिल्लियों की तर्ज पर

कुछ = [];

cats[0] = new cat(); 

cats[0].color = "red"; 
cats[0].name = "fluffy"; 

for (var cur in cats) 
{ 
    //Do Things 
} 

आज के सभी संपादनों के लिए खेद है- आज रात सो जाओ।

5

आपके द्वारा बनाए गए सभी ऑब्जेक्ट्स के माध्यम से लूप करना संभव नहीं है जब तक कि आप उन्हें कहीं भी ट्रैक नहीं करते (जैसे कि कन्स्ट्रक्टर में)। इस तरह कुछ-

var globalCatArray = []; 

function cat(color, sex){ 
    this.color = color; 
    this.sex = sex; 
    globalCatArray.push(this); 
} 

var fluffball = new cat("blue","male"); 
var shiznitz = new cat("red","male"); 
var slothersburger = new cat("green","female"); 

//use globalCatArray to get all instances 

हालांकि देखें। जब तक ऑब्जेक्ट सरणी में होते हैं, तब तक वे बिना कचरे के मेमोरी में रहते हैं। तो यदि आप बहुत सारी ऑब्जेक्ट्स बनाते हैं, तो आप इसे करने के बाद उन्हें सरणी से हटाना चाहेंगे।

इसके अलावा, for..in का प्रयोग न करने के लिए फिर भी करें। देखें इस Javascript Array extension

4

आप एक CatFactory वस्तु का एक प्रकार, बना सकते हैं और बिल्ली वस्तु उदाहरणों पर नज़र रखने के लिए समर्पित कर सकता है:

उपयोग:

CatFactory.createCat('fluffball', 'blue','male'); 
CatFactory.createCat('shiznitz', 'red','male'); 
CatFactory.createCat('slothersburger', 'green','female'); 


CatFactory.forEachCat (function() { // forEach abstraction 
    alert(this.name + ' is ' + this.color); 
}); 

कार्यान्वयन:

function Cat (name, color, sex){ 
    this.name = name; 
    this.color = color; 
    this.sex = sex; 
} 

CatFactory = { 
    createCat: function() { 
    var newCat = {}; 
    Cat.apply(newCat, arguments); 
    this.allCats.push(newCat); 
    return newCat; 
    }, 

    allCats: [], 

    forEachCat: function (action) { 
    for (var i = 0; i < this.allCats.length; i++){ 
     action.call(this.allCats[i]); 
    } 
    } 
}; 
+0

बिल्कुल अद्भुत!कोड का एकमात्र टुकड़ा मैं पाया सकता है कि भविष्य में हेरफेर के लिए उदाहरण बनाते हैं और नियंत्रण/बचत करते हैं। सुरुचिपूर्ण और genious! –

1

इस बारे में कैसे:

var Cat = (function cat(color, sex) { 
    var allCats = [], 
     catConstructor = function() { 
      allCats.push(this); 
      this.color = color; 
      this.sex = sex; 
     }; 
    catConstructor.each = function (fn) { 
     for (var i = 0; i < allCats.length; i++) { 
      fn.call(allCats[i]); 
     } 
    }; 
    return catConstructor; 
}()); // execute the function immediately 

इस के साथ, आपके पास कोई गंदा वैश्विक युद्ध नहीं है, और आपको Cat प्रोटोटाइप फ़ॉर्म से अपना इंटरफ़ेस बदलने की आवश्यकता नहीं है।

var fluffy = new Cat('brown', 'male'), 
    kitty = new Cat('black', 'female'); 
Cat.each(function() { 
    alert(this.color); 
}); 

आप अपने पाश इंटरफ़ेस जो चाहो (एक getAllCats() समारोह जो एक सरणी, या जो कुछ भी देता है) कर सकते हैं।

0

के बाद से मैं सिर्फ एक ऐसी ही समस्या थी, यहाँ एक आसान उपाय है कि अगर आप jquery का उपयोग करें:

function Cat(color, sex){ 
    this.color = color; 
    this.sex = sex; 
} 

var cats = []; 
function createCat(color, sex) 
{ 
    cats.push(new Cat(color, sex))); 
} 

createCat("white", "male"); 
createCat("black", "female"); 

//iterating cats by using jQuery's $.each 
$.each(cats, function(index, object){ 
     alert(object.color); 
}); 
संबंधित मुद्दे