鉴于我有一个类定义,如
(function () {
function Dummy(){
var toReturn ={
myProp : "asdf",
myFunc : myFunc
}
return toReturn;
function myFunc(){};
}
})();
如何在
之后获得相同类型的实例var dummy = new Dummy();
JSON.stringify(dummy);
这样我的myFunc仍然可用于该类型。
JSON.parse(JSON.stringify(dummy))
以相同的类型返回相同形状的对象。
注意:我不是在询问JSON的功能,而是人们如何处理这个问题。您是否手动滚动映射机制,以便在从JSON解析后将其映射到该类型的实例上,或者如果某些库中存在此类功能,例如下划线。
我创建了一个帮助我这样做的辅助函数,但是想听听别人如何处理这样的情况。正如我在评论中提到的那样,JSON来自线路,为此我们定义了一个类型。要从我们的类型中获取JSON的值,我们解析json,创建类型的实例,然后在下面应用map函数。
function map(fromObj, toObj) {
Object.keys(fromObj)
.forEach(function (key) {
if (typeof fromObj[key] != 'function') {
if (toObj.hasOwnProperty(key)) {
if (typeof fromObj[key] !== 'object') {
toObj[key] = fromObj[key];
} else {
map(fromObj[key], toObj[key]);
}
}
}
}
});
}
答案 0 :(得分:0)
注意,不确定要求,如果这与提出的问题类似。如果偏离主题,请发表评论,将退出。
Piece最初是为这个问题Organizing large javascript files [on hold]撰写的。通过json
响应,有" x" type
内容,可以将返回的对象映射到新对象,使用$.extend()
复制属性。
结果将是具有返回数据的属性和功能的新object
。在下面的部分,在完成流程后,$.Pages
以function
开头,然后类型转换为object
- 尽管它可以同时保留function
和object
属性在定义阶段加入|| {}
。
返回的json
个对象中的函数可以在.then()
回调中调用;请参阅jsfiddle的控制台,对象init
函数。
最后,$.Pages
对象具有返回json
的属性,包括对函数的访问。基于jsonp
类型的处理流程。
Piece is" frame"处理方法;可以扩展到包括其他功能
$(function() {
var dfd = new $.Deferred();
dfd.progress(function(msg) {
console.log(msg);
});
ProductPage = {
name : "ProductPage",
addToCartBtn: "#add-to-cart",
initName : function() {return dfd.notify(this.name)},
init: function() {
this.initName();
// ProductPage.initAddToCartPopup();
// ProductPage.initSidebar();
}
};
ContactPage = {
name : "ContactPage",
validateEmail : function (e) {return dfd.notify(e)},
initName : function() {return dfd.notify(this.name)},
init: function() {
this.initName();
// ProductPage.initAddToCartPopup();
// ProductPage.initSidebar();
}
};
var mods = function() {
return {"ContactPage" : ContactPage
, "ProductPage" : ProductPage };
};
$.Pages = function() {
$.when(mods())
.done(function(pages) {
$.Pages = pages;
});
return $.Pages
};
$.when($.Pages())
.then(function() {
$.each($.Pages, function(k, v) {
v.init();
})
});
console.log($.Pages)
});
jsfiddle http://jsfiddle.net/guest271314/60kv2439/1/(参见console
)
基本方法
$p = {};
var queue = [];
var mods = ["dep1.json", "service1.json"];
var mod = function(m) {
queue.push(m);
if (queue.length === mods.length) {
$.each(queue, function(k, v) {
$p = $.extend(v, $p)
})
}
};
$.each(mods, function(k, v) {
$.getScript(v, function(script, status, jqxhr) {
console.log($p)
})
})