javascript - JQuery getScript() 从 curl.js 模块调用匿名函数

标签 javascript jquery curl module anonymous-function

我有一个 Curl.js 模块定义为:

define("Portfolio", ["jquery"], function(jquery) {
var $ = jquery;

var Portfolio = (function() {
    $("#output").text("Getting Stuff");
    var name = "";
    var holdings = [];

    return {
        "stupid": function() {
            $.getScript("app/myScript.js", function(dog) {
                //var dog = new Dog();
                dog.speak();
            }).fail(function(jqxhr, settings, exception) {
                console.log(exception);
            });
        }
    }
})();

return Portfolio;
});

/app/myScript.js 看起来像这样:

(function() {

var breed = "Poodle";
return {
    speak: function() {
        alert("Woof");
    }
};
})();

我在 Chrome 的控制台中调用“愚蠢的”方法如下:

curl(['Portfolio'], function(Portfolio){
Portfolio.stupid();
});

Chrome 说:

Uncaught TypeError: Object (function() {

var breed = "Poodle";
return {
    speak: function() {
        alert("Woof");
    }
};
})(); has no method 'speak'

在 myScript.js 中,我可以使用 var Dog = (function(){....})(); 这会起作用,但我不想那样污染全局命名空间.

我也可以使用 function Dog(){....} 并在我的 getScript 回调中使用 new Dog().speak() 但是 Dog 不会一个模块,我将拥有私有(private)属性,并且它也将绑定(bind)到全局范围。

似乎 $.getScript() 没有将调用脚本的返回值绑定(bind)到任何可从 getScript() 的回调函数访问的变量;至少我找不到。它确实返回数据,但这只是调用脚本的文本。我确实找到了一个作弊方法,我可以获取返回的脚本并通过 eval() 运行它。奇怪的是,这几乎正是 $.getScript() 方法本身所做的。将 Stupid 方法修改为以下代码:

"stupid": function() {
    $.get("/app/myScript.js", function(Dog) {
        var dog = new (eval(Dog));
        console.log("Breed:" + dog.getBreed());
        d.setBreed("Lab");
        console.log("Breed: " + dog.getBreed());
    });
}

这确实有效,但感觉有点老套和错误。

如何使用 getScript() 调用编写为模块或匿名自执行函数的/app/myScript.js,然后调用其中一个返回函数? getScript 应该执行我认为的脚本,就像我写的那样,将对象绑定(bind)返回到 getScript 返回对象,然后我可以调用它?显然我在这里遗漏了一些东西。

为什么你不用 Javascript?

最佳答案

如果一旦你使用了 curl.js 或许最好忘记 JQuery.getScript() 阅读 curl 的 wiki!

关于javascript - JQuery getScript() 从 curl.js 模块调用匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19534860/

相关文章:

javascript - 我应该为此应用程序使用 MVC javascript 框架吗?

javascript - 如何正确使用 setInterval 和 clearInterval 在两个不同的函数之间切换?

javascript - 可以滚动到 div 内的下一个元素吗?

javascript - 使用 javascript 隐藏、加载和显示 div

php - guzzle,如何在多部分/表单数据中强制内容类型

c++ - libcurl 错误,curl_easy_perform() 失败 : c++

curl - 如何删除elasticsearch中特定索引中的多个数据

javascript - 隐藏面板直到调用模糊事件

javascript - canvas 标签可以用于在页面上的其他项目之上绘制吗?

javascript - 函数未通过 href 中的 javascript 调用