NB : 댓글 올리기이 문제를 해결하는 방법의 스타일에 작성합니다. 나는 그것이 OP의 경우에 사용할 수 있는지 100 % 확신하지 못합니다.
서버에서 생성되어 JSON/ajax를 통해 클라이언트에 전달 된 객체를 변환하는 방법을 찾는 중에이 게시물을 발견했습니다.
OP에서와 마찬가지로 클라이언트로 인스턴스를 생성 할 수 있도록 함수로 변환하려는 객체와 동일한 상황에서 효과적으로 나를 버렸습니다. 결국
내가 (지금까지 이상) 작동되는이 함께했다 : 나는 실제로 원하는 내 경우
var data = { _type: "Example", foo: "bar" };
parentObject.createFunc(data);
var instance = new parentObject.Example();
: 다음처럼 사용할 수 있습니다
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 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
Javascript 개체에 메서드를 할당 할 수 있기 때문에 연산자 오버로드를 할당 할 수도 있습니다. 나는 자바 스크립트를 모른다. 그래서 답을 모르지만, 행운을 빌어 요. ... –