我有一個函數可以幫助我創建臨時對象並節省我的時間輸入。正在使用新功能被視爲安全風險?
附加編輯:澄清此功能將永遠坐在anon函數內。
(function(){ // clarification of the functions location
var objectPump = function (props, defaults){
var str;
if(typeof defaults === "string"){
defaults = defaults.split(",");
}else
if(typeof defaults === "undefined" || !defaults.isArray){
defaults =[];
}
if(props !== undefined){
if(typeof props === "string"){
props = props.split(",");
}
}else{
throw new TypeError("No properties defined for objectPump.");
}
// create function body
str = "var obj={};";
props.each(function(p,i) {
str += "obj." + p + "=";
if (typeof defaults[i] === "string") {
str += p + "===undefined?" + '"' + defaults[i] + '":';
} else
if (typeof defaults[i] === "number") {
str += p + "===undefined?" + defaults[i] + ":";
}
str += p + ";";
});
str += "return obj;";
str = "return new Function('" + props.join("','") + "','" + str + "')";
// Uses new Function to create the new function
return (new Function(str))(); // Is this dangerous???
}
})(); // wrapped in an anon function
,它可以讓我不必來命名默認所有屬性和代碼創建對象。
編輯:使用上述功能。
var car = objectPump("colour,year,type", // objects property names
"white,2015,All Wheel Drive"); // object defaults
// or as arrays
var car = objectPump(["colour","year","type"], // objects property names
["white",2015,"All Wheel Drive"]); // object defaults
var cars = [
car("red",2011), // missing property defaults to All Wheel Drive
car("blue",2015,"bike"),
];
var aCar = car("blue",2015,"bike");
// same as
var aCar = {
colour:"blue",
year:2015,
type:"bike"
}; // but saves me having to type out the property names for each new object
對我來說,它看起來非常相似,使用eval和地方第三方哈克就進不去了一些惡意代碼。到目前爲止,它已經非常方便,我很想用new Function
用於其他任務。
我是否應該使用new Function()
來生成代碼,或者它被認爲是壞的和/或危險的公共代碼。
你能告訴我怎麼使用這個工具嗎? '新功能'可能不是必需的。 (這是不好的習慣,是的,但現在看起來並不存在任何漏洞......但是如果沒有在上下文中看到它也很難說。) – Ryan
在編輯中增加了用法。 – Blindman67
你如何實現這一點有點令人費解。這樣做「正常」的方式會使它更清潔,你不需要eval或'new Function'。 – JJJ