次のように定義された 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();
});
そしてクロムは言う:
Uncaught TypeError: Object (function() {
var breed = "Poodle";
return {
speak: function() {
alert("Woof");
}
};
})(); has no method 'speak'
myScript.js では、var Dog = (function(){....})();
どちらが機能するかを使用できますが、そのようにグローバル名前空間を汚染したくありません。
function Dog(){....}
また、getScript コールバックの使用で and を使用することもできますnew Dog().speak()
が、Dog は、プライベート プロパティを持つモジュールではなく、グローバル スコープにもバインドされます。
$.getScript() は、呼び出されたスクリプトの戻り値を、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 を呼び出し、返された関数の 1 つを呼び出すにはどうすればよいですか? getScript は、私が書いたように、私が呼び出すことができる getScript 戻りオブジェクトにバインドされたオブジェクトを返すと思ったスクリプトを実行することになっていますか? 明らかに、ここで何かが欠けています。
なぜあなたはJavascriptを働かないのですか?