是否可以插入localstorage或是否有其他方式来存储它?
ProfileResponseWrapper
答案 0 :(得分:7)
我不知道你为什么要这样,我不推荐它,但你可以使用toString
来做。
存储它:
var myFunc = function (){
alert('Hello world!');
};
// Store it as a String
localStorage.setItem('compressedFunc', myFunc.toString());
稍后,检索它:
var compressedFunc = localStorage.getItem('compressedFunc');
// Convert the String back to a function
var myFunc = eval('(' + compressedFunc + ')');
// Use it
myFunc();
答案 1 :(得分:0)
如果您使用JavaScript编码功能,则无需从expect(Object.getPrototypeOf(UF_Controller.router)).to.equal(express.Router);
恢复它,因为您已经可以使用它。
你不能JSON编码一个函数。您可以保存该函数的源代码,并在检索时将localStorage
应用于它。但众所周知,这有一定的风险,在“eval
是邪恶的”这句话中被捕获。
如果您要创建一个能够详细描述该函数应该执行的操作的对象结构,那么您可以稍微限制该风险。在您的情况下,函数中的每个语句都是应用于jQuery选择器的方法。您可以使用以下对象表示:
eval
然后你的实际函数可以将该对象作为其输入,并对其进行处理,从而产生相同的效果:
var compressed = [
{ selector: '.whole_wrap_of_editcriteria', method: 'css', args: ['display', 'none'] },
{ selector: '#wrappler', method: 'css', args: ['display', 'none'] },
{ selector: '#li_addcriteria', method: 'css', args: ['display','none'] },
{ selector: '#li_menu1', method: 'addClass', args: ['active'] },
{ selector: '#home', method: 'removeClass', args: ['active'] },
{ selector: '#menu1', method: 'addClass', args: ['active'] },
{ selector: '#title_panel', method: 'html', args: ['Edit criteria scoring'] }
];
现在,当你想将这些知识保存到var applyInstructions = function(instructions) {
instructions.forEach( cmd => $(cmd.selector)[cmd.method](...cmd.args) );
}
时,你只需要存储上面构造的对象,如下所示:
localStorage
在检索之后,您将在其上执行泛型函数:
// save to localStorage:
localStorage.setItem('compressed', JSON.stringify(compressed));
这类似于使用// get from localStorage:
applyInstructions(JSON.parse(localStorage.getItem('compressed')));
,但它的优势在于您可以对可以执行的内容设置限制(在eval
中)。例如,您可以检查applyInstructions
属性应该只是其中一个值method
,css
,addClass
和removeClass
,尽管最后一个属性可以要保持危险。如果可能,html
将是更好的选择。
以下是更安全textContent
的样子:
applyInstructions