从javascript中的对象值执行函数
我试图从每个对象键执行一个函数,这里是代码从javascript中的对象值执行函数,javascript,backbone.js,Javascript,Backbone.js,我试图从每个对象键执行一个函数,这里是代码 var testObj={text:“这是文本”,alltext:“这是所有文本”}; 函数文本(){ 警报(“这是第一个值的测试函数”); } 函数alltext(){ 警报(“这是第一秒的测试函数!”); } 对于(testObj中的项目){ 控制台日志(项目); 项目(); }所以我相信您对javascript中字典的工作原理是错误的。第一个值是一个键,并且始终是一个字符串值,可以执行您想要执行的操作 var testObj=[[text,“
var testObj={text:“这是文本”,alltext:“这是所有文本”};
函数文本(){
警报(“这是第一个值的测试函数”);
}
函数alltext(){
警报(“这是第一秒的测试函数!”);
}
对于(testObj中的项目){
控制台日志(项目);
项目();
}
所以我相信您对javascript中字典的工作原理是错误的。第一个值是一个键,并且始终是一个字符串值,可以执行您想要执行的操作
var testObj=[[text,“this is text”],[alltext,“this is all text”];
函数文本(){
警报(“这是第一个值的测试函数”);
}
函数alltext(){
警报(“这是第一秒的测试函数!”);
}
for(testObj中的索引){
控制台日志(索引);
testObj[index][0]();
}
所以我相信您对javascript中字典的工作原理是错误的。第一个值是一个键,并且始终是一个字符串值,可以执行您想要执行的操作
var testObj=[[text,“this is text”],[alltext,“this is all text”];
函数文本(){
警报(“这是第一个值的测试函数”);
}
函数alltext(){
警报(“这是第一秒的测试函数!”);
}
for(testObj中的索引){
控制台日志(索引);
testObj[index][0]();
}
您应该使用JavaScript函数:
for (item in testObj) {
console.log(testObj[item]);
eval(item + "()");
}
您应该使用JavaScript函数:
for (item in testObj) {
console.log(testObj[item]);
eval(item + "()");
}
或者可以从对象中引用函数
var testObj = { text: text , alltext : alltext };
function text() {
alert( "this is test function for first value");
}
function alltext() {
alert( "this is test function for first second!" );
}
for ( item in testObj ) {
console.log(item);
testObj[item]();
}
或者可以从对象中引用函数
var testObj = { text: text , alltext : alltext };
function text() {
alert( "this is test function for first value");
}
function alltext() {
alert( "this is test function for first second!" );
}
for ( item in testObj ) {
console.log(item);
testObj[item]();
}
构造testObj如下所示:
var testObj = {
text: function(){alert("this is test function for first value")} ,
alltext : function(){alert("this is test function for first second!")}
};
然后只需调用
testObj.a()代码>构造testObj如下:
var testObj = {
text: function(){alert("this is test function for first value")} ,
alltext : function(){alert("this is test function for first second!")}
};
然后只需调用testObj.a()代码>可以通过将动态函数附加到窗口对象来实现
var testObj = { text: "this is text", alltext: " thi is all text" };
for (var item in testObj) {
window[item] = function () {alert("hello world")};
}
console.log(window['text'],window['alltext']);
window.text();
window.alltext();
也可以在不使用“窗口”的情况下调用函数,即:
或者,如果您希望通过属性名动态调用函数
var testObj = { text: "this is text", alltext: " thi is all text" };
window['text'] = function() {
alert("this is test function for first value");
}
window['alltext'] = function (){
alert("this is test function for first second!");
}
for (var item in testObj) {
window[item]();// = function () {alert("hello world")};
}
可以通过将动态函数附加到窗口对象来完成此操作
var testObj = { text: "this is text", alltext: " thi is all text" };
for (var item in testObj) {
window[item] = function () {alert("hello world")};
}
console.log(window['text'],window['alltext']);
window.text();
window.alltext();
也可以在不使用“窗口”的情况下调用函数,即:
或者,如果您希望通过属性名动态调用函数
var testObj = { text: "this is text", alltext: " thi is all text" };
window['text'] = function() {
alert("this is test function for first value");
}
window['alltext'] = function (){
alert("this is test function for first second!");
}
for (var item in testObj) {
window[item]();// = function () {alert("hello world")};
}
嗯,item()
不是函数。在您的情况下,唯一的解决方案是,不将这些函数指定为对象的成员。。。是eval
。您可以获取该字段,并使用来调用函数。将funcs放入对象中,如var funcs={text:function(){},alltext:function(){}代码>然后执行funcs[item]()
嗯,item()
不是函数。在您的情况下,唯一的解决方案是,不将这些函数指定为对象的成员。。。是eval
。您可以获取该字段,并使用来调用函数。将funcs放入对象中,如var funcs={text:function(){},alltext:function(){}代码>然后做funcs[item]()
还有什么可以避免评估的吗??因为它有安全风险?这取决于……恶意用户可能会使用浏览器的开发工具执行他想要的任何客户端脚本。请记住,这些脚本将在他的客户机上运行,而不是在您的服务器上运行。要了解更多信息,请阅读以下内容:@codeforce如果testObj
的内容可以在用户无法控制的情况下进行操作,那么这只是一种安全风险。是否有任何方法可以避免评估??因为它有安全风险?这取决于……恶意用户可能会使用浏览器的开发工具执行他想要的任何客户端脚本。请记住,这些脚本将在他的客户机上运行,而不是在您的服务器上运行。要了解更多信息,请阅读以下内容:@codeforce如果testObj
的内容可以在用户无法控制的情况下进行操作,这只是一种安全风险。我不能,因为我有一个来自外部源的数据作为键值对。我不能,因为我有一个来自外部源的数据作为键值对。你的意思是testObj[item]
。您必须使用[]
符号来动态访问对象属性。不,这将查找字面上命名为项的属性,而不是使用项
变量的值。我认为。它们完全相同,只是方括号运算符可以使用字符串变量访问对象的成员,而点运算符只能使用文字。请看一看:这正是我要说的testObj.a()
查找名为a
的文本属性,它不使用变量a
的值。如果属性名在字符串变量中,则必须使用方括号。您的意思是testObj[item]
。您必须使用[]
符号来动态访问对象属性。不,这将查找字面上命名为项的属性,而不是使用项
变量的值。我认为。它们完全相同,只是方括号运算符可以使用字符串变量访问对象的成员,而点运算符只能使用文字。请看一看:这正是我要说的testObj.a()
查找名为a
的文本属性,它不使用变量a
的值。如果属性名在字符串变量中,则必须使用方括号。我使用下划线“pair”对象方法将对象转换为数组“key,value”对。然后我可以执行它们。成对({1:1,2:2,3:3});=>[[“一”,1],“二”,2],“三”,3]@Jack Mata,请不要缩进代码片段的标记(只是标记)。它可以进行有趣的渲染。我使用下划线“pair”对象方法将对象转换为数组“key,value”对。然后我可以执行它们。成对({1:1,2:2,3:3});=>[[“一”,1],“二”,2],“三”,3]@Jack Mata,请不要缩进代码片段的标记(只是标记)。它可以做出有趣的渲染。