[英]How do I create a custom namespace or class in javascript
我想創建自己的命名空間,比如$ for JQuery
(function(app) {
app.fn.log = function(data) {
console.log(data);
};
}(app));
app.log("data");
但是此代碼返回錯誤 - 未捕獲的ReferenceError:app未定義
如何創建自己的命名空間?
在javascript中實現命名空間的一種常用方法是利用具有直接函數的模塊模式進行范圍界定(就像您在問題中演示的那樣)。 這也允許您傳入具有非沖突名稱的對象,並將它們與您喜歡的參數化名稱一起使用,例如$
like so:
//Global script declaration
var NAMESPACE = {};
//Check if you need to initialize your namespace
NAMESPACE.FooSpace = NAMESPACE.FooSpace || {};
//Some other script
NAMESPACE.FooSpace = (function($) {
function Foo1() {
}
function Foo2() {
return $.getSomething(); //some existing function inside of someObjectWithANonConflictingName object
}
return { Foo1: Foo1, Foo2: Foo2 };
})(someObjectWithANonConflictingName);
//somewhere else in code (call as a constructor function)
var foo = new NAMESPACE.FooSpace.Foo1();
//somewhere else in code (call as regular function)
var foo2 = Foo2();
NAMESPACE
對象,以便具有重疊的函數和變量名稱。 NAMESPACE
對象中。 window.app = {};
(function(app) {
app.log = function(data) {
console.log(data);
};
}(app));
app.log("data");
jQuery與它的fn
略有不同:因為你使用$('selector')
語法來查找你需要處理的元素jQuery返回包含除了內置fn.func
之外你所做的所有fn.func
類定義的spetial 包裝器功能。
因此,如果您需要實現某種可擴展性,您應首先考慮這種包裝。 例如:
window.app = function(p) {
// do whatever you need
var wrapper = {
// standard common fields
};
if (app.fn) {
// extend wrapper with app.fn
}
return wrapper;
};
順便問一下,你想解決什么問題?
在你的情況下,當然有一個例外,因為app
沒有被匿名函數執行時定義。
你的語法還可以,但你必須定義一個app
。 您將應用程序作為參數傳遞給IIFE ,但未定義應用程序! 如果你想以app身份訪問jQuery,只需使用jQuery對象調用你的IIFE:
(function(app) {
app.fn.log = function(data) {
console.log(data);
};
}($)); // where $ is your jQuery.
和
$.log("data");
謹防! 日志功能將在IIFE范圍內外使用!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.