दिलचस्प पोस्ट
मैं WCF सेवा से साफ JSON कैसे वापस कर सकता हूं? मैं एक सटीक समय कैसे प्राप्त कर सकता हूं, उदाहरण के लिए उद्देश्य सी में मिलीसेकंड में? दो पूर्णांक मूल्यों को विभाजित करके फ्लोट के परिणाम कैसे प्राप्त करें? सभी एंड्रॉइड संपर्क कैसे प्राप्त करें, लेकिन सिम पर हैं बिना 2 वर्कफ़्लो में अंतर क्या है? प्राधिकरण कोड प्रवाह का उपयोग कब करना है? प्रतिबिंब – एक सिस्टम। टाइप उदाहरण से जेनेरिक पैरामीटर प्राप्त करना MKPinAnnotationView: क्या तीन से अधिक रंग उपलब्ध हैं? जावा सूची.contains (x के बराबर फ़ील्ड मान के साथ ऑब्जेक्ट) ब्राउज़र-देशी JSON समर्थन (window.JSON) डुप्लिकेट कुंजी अद्यतन के साथ MySQL लोड डेटा INFILE वेबहोस्टर एक जावास्क्रिप्ट सम्मिलित करता है जो मेरे कोड को कैसे हटा देता है, इसे कैसे हटा सकता है? आर में निर्देशिका में सभी फ़ाइलों के माध्यम से लुकिंग, एकाधिक आदेशों को लागू करना मैं WinForms में किसी चित्र को कैसे घुमाएगा नई स्वचालित संदर्भ गिनती तंत्र कैसे काम करता है? JFrame में पृष्ठभूमि चित्र सेट करना

जावास्क्रिप्ट में उदाहरणों ("कक्षाएं") को चलाने के लिए सादे ऑब्जेक्ट कास्टिंग करना

function Person() { var self = this; self.personName=""; self.animals=[]; } function Animal(){ var self=this; self.animalName=""; self.run=function(meters){ ..... } } 

सर्वर प्रतिक्रिया:

  [{personName:John,animals:[{animalName:cheetah},{animalName:giraffe}]} , {personName:Smith,animals:[{animalName:cat},{animalName:dog}]} ] 

मुझे सर्वर से व्यक्ति सरणी मिल रही है मैं टाइप किए गए व्यक्ति सरणी के लिए सामान्य व्यक्ति सरणी को डालना चाहता हूं तो मैं उपयोग कर सकते हैं

  persons[0].Animals[2].Run(); 

मैंने जावास्क्रिप्ट की स्थापना की

  Object.create(Person,person1); 

लेकिन मैं इसे क्रॉस-ब्राउज़र संस्करण का सरणी समर्थन से चाहता हूं

  ObjectArray.create(Person,persons); 

या

  Object.create(Person[],persons); 

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट में उदाहरणों ("कक्षाएं") को चलाने के लिए सादे ऑब्जेक्ट कास्टिंग करना"

जावास्क्रिप्ट में किसी ऑब्जेक्ट को बनाने से इसके कन्स्ट्रक्टर की आवाज़ की आवश्यकता होती है। तो, पहले आपको सही तर्क मिलना होगा, जो हमेशा न केवल गुण हो सकते हैं इसके बाद, आप JSON-parseed ऑब्जेक्ट से सभी सार्वजनिक गुणों को बनाए गए उदाहरणों में पुन: असाइन कर सकते हैं।

एक सामान्य समाधान होगा कि हर निर्माता किसी भी वस्तु को स्वीकार करता है जो उदाहरण (वास्तविक उदाहरणों सहित) की तरह दिखता है और उन्हें क्लोन करता है। उचित उदाहरण बनाने के लिए आवश्यक सभी आंतरिक तर्क सही जगह पर स्थित होंगे।

या कंस्ट्रक्टर ओवरलोडिंग से बेहतर भी हो सकता है कि आपके क्लास पर एक स्थिर विधि तैयार हो जो ऑब्जेक्ट लेती है और उनसे उदाहरण बनाता है:

 Person.fromJSON = function(obj) { // custom code, as appropriate for Person instances // might invoke `new Person` return …; }; 

आपका केस बहुत आसान है, क्योंकि आपके पास कोई तर्क नहीं है और केवल सार्वजनिक गुण हैं {personName:John,animals:[]} को किसी वस्तु के उदाहरण में बदलने के लिए, इसका उपयोग करें:

 var personLiteral = ... // JSON.parse("..."); var personInstance = new Person(); for (var prop in personLiteral) personInstance[prop] = personLiteral[prop]; 

आप इसके लिए Object.extend कार्यक्षमता का भी उपयोग कर सकते हैं, क्या आपको एक उपलब्ध होना चाहिए (जैसे jQuery):

 var personInstance = $.extend(new Person(), personLiteral); 

Animal उदाहरणों का निर्माण समान रूप से कार्य करता है

जैसा कि JSON कक्षाओं के बारे में कोई जानकारी नहीं लेता है, आपको पहले संरचना को अवश्य पता होना चाहिए। आपके मामले में यह होगा:

 var persons = JSON.parse(serverResponse); for (var i=0; i<persons.length; i++) { persons[i] = $.extend(new Person, persons[i]); for (var j=0; j<persons[i].animals; j++) { persons[i].animals[j] = $.extend(new Animal, persons[i].animals[j]); } } 

बीटीडब्ल्यू, आपके run विधियों को हर उदाहरण के बजाय Animal.prototype ऑब्जेक्ट पर जोड़ा जा सकता है।

ऐसा लगता है कि आपके पास ऐसे वर्ग हैं जिनके पास कुछ प्रोटोटाइप विधियां हैं और आप अपने ऑब्जेक्ट उन तरीकों का उपयोग करने में सक्षम होना चाहते हैं। http://jsfiddle.net/6CrQL/3/

 function Person() {} Person.prototype.speak = function() { console.log("I am " + this.personName); }; Person.prototype.runAnimals = function() { this.animals.each(function(animal){ animal.run(); }) }; function Animal() {} Animal.prototype.run = function() { console.log("My Animal " + this.animalName+ " is running"); } var untypedPersons = [{personName:"John",animals:[{animalName:"cheetah"},{animalName:"giraffe"}]} , {personName:"Smith",animals:[{animalName:"cat"},{animalName:"dog"}]} ]; function fromArray(arr, constructor) { return arr.map(function(obj){ var typed = Object.create(constructor.prototype); // Now copy properties from the given object for (var prop in obj) { typed[prop] = obj[prop]; } return typed; }); } var persons = fromArray(untypedPersons, Person); // Attach prototype to each animals list in person persons.each(function(person){ person.animals = fromArray(person.animals, Animal); }); persons.each(function(person){ person.speak(); person.runAnimals(); }); 

यह सब बहुत आसान हो सकता है (और हम सभी नकल से बच सकते हैं) अगर सब लोग __proto__ प्रॉपर्टी का समर्थन करते हैं http://jsfiddle.net/6CrQL/2/

 persons.each(function(person){ person.__proto__ = Person.prototype; person.animals.each(function(animal){ animal.__proto__ = Animal.prototype; }); }); persons.each(function(person){ person.speak(); person.runAnimals(); });​ 

सबसे पहले: जावास्क्रिप्ट में आपके पास सी ++, जावा या सी # जैसी कक्षाएं नहीं हैं। तो आप वास्तव में एक टाइप ऐरेर नहीं कर सकते

आप जो कर रहे हैं वह मूल रूप से चर के लिए काम करना चाहिए, लेकिन फ़ंक्शन के लिए नहीं। तो आपको पहले कार्यों को जोड़ना होगा। एक विचार प्राप्त करने के लिए निम्न कोड पर एक नज़र डालें।

 <script type="text/javascript"> function Person() { var self = this; self.personName=""; self.animals=[]; } function Animal(){ var self=this; self.animalName=""; self.run=function(meters){ 7/... do something } } var persons = [{personName:"John",animals:[{animalName:"cheetah"},{animalName:"giraffe"}]} , {personName:"Smith",animals:[{animalName:"cat"},{animalName:"dog"}]} ]; //use this to assign run-function var a = new Animal(); //assign run-function to received data persons[0].animals[0].run = a.run; //now this works persons[0].animals[0].run(); </script> 

व्यक्ति वर्ग पर एक स्टेटिक विधि बनाने के बारे में, जो आपके सर्वर का जवाब स्वीकार करेगा और आवश्यक चर बनायेगा।

यह सिर्फ एक विचार है कृपया देखें कि यह आपकी समस्या में फिट बैठता है या नहीं।

 //Static method Person.createObjects = function( response ) { var persons = []; for ( var p = 0; p < response.length; p++ ) { //Create Person var person = new Person( response[p].personName ); //Create Animals for ( var a = 0; a < response[p].animals.length; a++ ) { var animal = new Animal( response[p].animals[a].animalName ); //Push this animal into Person person.animals.push ( animal ); } //Push this person in persons persons.push ( person ); } //Return persons return persons; } //Now Create required persons by passing the server response var persons = Person.createObjects ( response );