एनबी: पोस्ट कैसे मैं समस्या हल हो जाती की शैली में लिखा। मुझे 100% यकीन नहीं है कि यह ओपी के मामले में प्रयोग योग्य है।
मुझे सर्वर पर बनाए गए ऑब्जेक्ट्स को कन्वर्ट करने के लिए एक तरीका ढूंढने और JSON/AJAX द्वारा क्लाइंट को वितरित करने के दौरान यह पोस्ट मिला।
ओपी के रूप में उसी स्थिति में मुझे प्रभावी ढंग से छोड़ दिया गया, एक वस्तु जिसे मैं एक समारोह में परिवर्तित करना चाहता था ताकि ग्राहक पर इसके उदाहरण पैदा कर सकें।
अंत में मैं इस के साथ आया था, जो काम कर रहा है (अब तक कम से कम):
var parentObj = {}
parentObj.createFunc = function (model)
{
// allow it to be instantiated
parentObj[model._type] = function()
{
return (function (model)
{
// jQuery used to clone the model
var that = $.extend(true, null, model);
return that;
})(model);
}
}
कौन सा तो की तरह इस्तेमाल किया जा सकता है:
var data = { _type: "Example", foo: "bar" };
parentObject.createFunc(data);
var instance = new parentObject.Example();
मेरे मामले में मैं वास्तव में चाहता था परिणामस्वरूप ऑब्जेक्ट उदाहरणों से जुड़े कार्यों के लिए, और इसे तत्काल करने के समय पैरामीटर में भी सक्षम होने में सक्षम होना चाहिए।
तो मेरी कोड था:
var parentObj = {};
// base model contains client only stuff
parentObj.baseModel =
{
parameter1: null,
parameter2: null,
parameterN: null,
func1: function()
{
return this.parameter2;
},
func2: function (inParams)
{
return this._variable2;
}
}
// create a troop type
parentObj.createModel = function (data)
{
var model = $.extend({}, parentObj.baseModel, data);
// allow it to be instantiated
parentObj[model._type] = function(parameter1, parameter2, parameterN)
{
return (function (model)
{
var that = $.extend(true, null, model);
that.parameter1 = parameter1;
that.parameter2 = parameter2;
that.parameterN = parameterN;
return that;
})(model);
}
}
और इस तरह बुलाया गया था:
// models received from an AJAX call
var models = [
{ _type="Foo", _variable1: "FooVal", _variable2: "FooVal" },
{ _type="Bar", _variable1: "BarVal", _variable2: "BarVal" },
{ _type="FooBar", _variable1: "FooBarVal", _variable2: "FooBarVal" }
];
for(var i = 0; i < models.length; i++)
{
parentObj.createFunc(models[i]);
}
और फिर वे इस्तेमाल किया जा सकता:
var test1 = new parentObj.Foo(1,2,3);
var test2 = new parentObj.Bar("a","b","c");
var test3 = new parentObj.FooBar("x","y","z");
// test1.parameter1 == 1
// test1._variable1 == "FooVal"
// test1.func1() == 2
// test2.parameter2 == "a"
// test2._variable2 == "BarVal"
// test2.func2() == "BarVal"
// etc
मैं ऐसा करने की जरूरत समझ में नहीं आता इस। क्या आप जो हासिल करने की कोशिश कर रहे हैं उसका एक ठोस उदाहरण दे सकते हैं? – Geoff
मैं अभी दूसरे फॉर्म के उपयोग के बारे में नहीं सोच सकता। पहला स्थिर चर के लिए कुछ हद तक उपयोगी है (हालांकि बंद भी करेंगे)। मैं ज्यादातर पूछ रहा हूं क्योंकि मैं संपत्तियों की प्रतिलिपि किए बिना इसे प्राप्त करने का एक तरीका नहीं सोच सकता, जो दुर्भाग्यपूर्ण है क्योंकि वे समानांतर रूप हैं। – mjs
लगता है जैसे आप उम्मीद कर रहे हैं क्योंकि आप जावास्क्रिप्ट ऑब्जेक्ट को एक विधि असाइन कर सकते हैं, आप ऑपरेटर ओवरलोड भी असाइन कर सकते हैं। मुझे जावास्क्रिप्ट नहीं पता है इसलिए मुझे जवाब नहीं पता, लेकिन शुभकामनाएं ... –