Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript调用窗口对象上的函数_Javascript_Jquery - Fatal编程技术网

javascript调用窗口对象上的函数

javascript调用窗口对象上的函数,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

我有下面的代码,我想知道如何使最后一行工作。我添加了一组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_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");