我有一個Curl.js模塊定義爲:JQuery的getScript加入()調用從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()
但不會是一個模塊,因爲我會擁有私有屬性,它也將被綁定到全局範圍。看起來$ .getScript()不會將腳本的返回值綁定到任何可以通過getScript()的回調函數訪問的變量。至少沒有我能找到。它確實會返回數據,但這只是所調用腳本的文本。我確實發現了一個作弊行爲,我可以將返回的腳本通過eval()
運行。奇怪的是,這幾乎就是$ .getScript()方法本身的功能。將愚蠢的方法修改爲以下代碼:
"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應該執行我認爲的腳本,正如我寫的那樣,將對象返回給getScript返回對象,然後我可以調用它?很明顯,我在這裏錯過了一些東西。
爲什麼你不工作的Javascript?