![](/img/trans.png)
[英]How to define a clojurescript function in the javascript global namespace at compile time?
[英]how to define global namespace in javascript
有沒有辦法定義全局命名空間,以便我可以從我的所有頁面調用此命名空間的函數?
例如
//在一個文件中我定義下面的代碼
DefineNameSpace("my.namespace.api", {
addObject: function(obj) {
// store obj into indexDB
},
readAllObject: function() {
// return array of object from indexdb
}
})
//這樣在我可以做的另一個javascript文件中
my.namespace.api.addObject({name: "foo", desc: "bar"});
有沒有辦法實現“DefineNameSpace”方法?
謝謝
一種方法,這很簡單,是這樣的:
my = {
namespace: {
api : {}
}
}
my.namespace.api.addObject = function (obj) { }
你實際上是在創建對象,但這樣它也可以作為命名空間運行:)
嗯,這不是你正在實施的方法。 但是使用方法構建命名空間需要在加載腳本文件之前調用函數,其中使用命名空間,否則在調用DefineNamespace方法之前調用這些代碼行,並且您將遇到部分名稱空間在那一點上是不確定的。 上面的解決方案並非如此,但不幸的是它不是動態的。
動態構建命名空間可以通過以下方式完成:
// the root of the namespace would still be handy to have declared here
var my = {};
function defineNamespace(namespaceStr) {
var namespaceSegments = namespaceStr.split(".");
var namespaceSoFar = null;
// iterate through namespace parts
for (var i = 0; i < namespaceSegments.length; i++) {
var segment = namespaceSegments[i];
if (i == 0) {
// if namespace starts with my, use that
if (segment == "my") {
// set pointer to my
namespaceSoFar = my;
}
else {
// create new root namespace (not tested this, but think this should work)
var otherNamespace = eval(segment);
if (typeof otherNamespace == "undefined") {
eval(segment + " = {};");
}
// set pointer to created root namespace
namespaceSoFar = eval(segment);
}
}
else {
// further build the namespace
if (typeof namespaceSoFar[segment] == "undefined") {
namespaceSoFar[segment] = {};
}
// update the pointer (my -> my.namespace) for use in the next iteration
namespaceSoFar = namespaceSoFar[segment];
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.