gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:43:16 26 4
gpt4 key购买 nike

我有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com