javascript调用窗口对象上的函数
我有下面的代码,我想知道如何使最后一行工作。我添加了一组api,即当前使用的视图,作为其名称空间约定附加,并且更愿意使用类似于arc.view.$function\u name的东西。thxjavascript调用窗口对象上的函数,javascript,jquery,Javascript,Jquery,我有下面的代码,我想知道如何使最后一行工作。我添加了一组api,即当前使用的视图,作为其名称空间约定附加,并且更愿意使用类似于arc.view.$function\u name的东西。thx var arc={}; arc.view={ say_hello: function(){ alert("I want to say hello"); } } function say_goodbye(){ alert("goodbye to you"); } arc.view.say
var arc={};
arc.view={
say_hello: function(){
alert("I want to say hello");
}
}
function say_goodbye(){
alert("goodbye to you");
}
arc.view.say_hello(); // works
window['say_goodbye'](); // works
// possible to make this work?
window['arc.view.say_hello']();
或
或
点语法或括号语法都可以。点语法实际上只是基于括号的属性查找的语法糖,所以上面的所有代码片段都是相同的。如果属性名称本身是动态值,或者在点语法中使用属性名称会导致语法错误,请使用括号语法。例如:
var dynamicMethodName = someObject.getMethodName();
someOtherObject[dynamicMethodName]();
或
试试这个:
使用方括号表示法,实际上是要求在名为
arc.view.say_hello
的窗口中执行函数,而不是在对象视图中执行函数(这是对象arc
的属性)。更明确地说:
window["arc.view.say_hello"] = function () { alert("hi") };
window["arc.view.say_hello"](); // "hi"
如果您想以所描述的方式调用函数,则必须“解析”对象链。您可以为此创建一个实用程序函数。比如:
var arc={};
arc.view={
say_hello: function(){
alert("I want to say hello");
}
}
function say_goodbye(){
alert("goodbye to you");
}
function call(id) {
var objects = id.split(".");
var obj = this;
for (var i = 0, len = objects.length; i < len && obj; i++)
obj = obj[objects[i]];
if (typeof obj === "function")
obj();
}
call("say_goodbye");
call("arc.view.say_hello");
var-arc={};
弧形视图={
打招呼:函数(){
警惕(“我想打招呼”);
}
}
函数say_再见(){
警惕(“再见”);
}
函数调用(id){
var objects=id.split(“.”);
var obj=这个;
对于(变量i=0,len=objects.length;i
您还可以扩展实用程序函数以使用参数
(或者您可以只返回对该函数的引用)。因为您,我以成功结束了一整天的奋斗……谢谢+1
var dynamicMethodName = someObject.getMethodName();
someOtherObject[dynamicMethodName]();
someOtherObject["a key string with spaces and {special characters}"]();
window["arc"]["view"]["say_hello"]();
window["arc.view.say_hello"] = function () { alert("hi") };
window["arc.view.say_hello"](); // "hi"
var arc={};
arc.view={
say_hello: function(){
alert("I want to say hello");
}
}
function say_goodbye(){
alert("goodbye to you");
}
function call(id) {
var objects = id.split(".");
var obj = this;
for (var i = 0, len = objects.length; i < len && obj; i++)
obj = obj[objects[i]];
if (typeof obj === "function")
obj();
}
call("say_goodbye");
call("arc.view.say_hello");