在 Javascript 中定义一个具有命名空间的类
Posted
技术标签:
【中文标题】在 Javascript 中定义一个具有命名空间的类【英文标题】:Define a class with namespace in Javascript 【发布时间】:2014-10-06 18:52:45 【问题描述】:参考https://***.com/a/387733/418439,
// Define a class like this
function Person(name, gender)
// Add object properties like this
this.name = name;
this.gender = gender;
// Add methods like this. All Person objects will be able to invoke this
Person.prototype.speak = function()
alert("Howdy, my name is" + this.name);
// Instantiate new objects with 'new'
var person = new Person("Bob", "M");
// Invoke methods like this
person.speak(); // alerts "Howdy, my name is Bob"
namespace也怎么定义?
【问题讨论】:
javascript 中没有命名空间。 @wumm 确实没有,但你可以模拟它们。 How do I declare a namespace in JavaScript?的可能重复 【参考方案1】:您可以创建一个包含所有类/函数的新对象:
var myNamespace = ;
myNamespace.Person = function (name, gender)
// Add object properties like this
this.name = name;
this.gender = gender;
myNamespace.Person.prototype.speak = function()
alert("Howdy, my name is" + this.name);
// Instantiate new objects with 'new'
var person = new myNamespace.Person("Bob", "M");
// Invoke methods like this
person.speak(); // alerts "Howdy, my name is Bob"
MDN 有一个article explaining JavaScript namespacing。
【讨论】:
yNamespace.Person = Person(name, gender)
必须是 yNamespace.Person = function(name, gender)
@wumm 谢谢,没看到。【参考方案2】:
怎么样
var namespace = ;
namespace.Person = function(name, gender) ... ;
var myPerson = new namespace.Person();
【讨论】:
【参考方案3】:检查此参考:- here
var yourNamespace =
foo: function()
,
bar: function()
;
...
yourNamespace.foo();
【讨论】:
你是从here获取这个代码吗?【参考方案4】:var MYNamespace = MYNamespace|| ;
MYNamespace.MyFirstClass = function (val)
this.value = val;
this.getValue = function()
return this.value;
;
var myFirstInstance = new MYNamespace.MyFirstClass(46);
alert(myFirstInstance.getValue());
jsfiddle:http://jsfiddle.net/rpaul/4dngxwb3/1/
【讨论】:
【参考方案5】:我曾经做过一个示例文件(供我自己使用),所以我会在这里分享它,也许你会发现它很有用(警告:它包含的不仅仅是命名空间):
//http://www.crockford.com/javascript/private.html
//http://www.dustindiaz.com/namespace-your-javascript/
//http://appendto.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-1/
//adding the whole shabang to a namespace
var NameSpace = (function (params)
//initialising constructor with parameter
//call as "var testObject = new MyConstructor("test");"
//then accessing the public members: "testObject.publicMember = 123;"
function MyConstructor(param, param2)
//initialising public instance member variables
//these could also be added by calling "testObject.[newMemberName] = [value];" to create a new property
//can be accessed by private and public methods
this.publicMember = param;
this.secondPublicMember;
//initialising private instance member variables
//private variables can only be added at creation time
//can be accessed by private methods, but not by the object's own public methods.
var privateMember = param2;
var secondPrivateMember;
//creates a private function, NOT accessible by public functions (ONLY by internal private and privileged ones)
//has access to all private/public functions and variables?
function PrivateFunction(params)
//place code here
//note this notation is short for "var PrivateFunction = function PrivateFunction(params) ;"
//creates a privileged function, accessible by all public (and private?) functions
//has access to all private/public functions and variables
this.PrivilegedFunction = function (params)
//place code here
;
//creating a public function, accessible by calling "testObject.PublicFunction(params)"
//can also be done by calling "testObject.[newFunctionName] = function (params) ;"
//has access to all public members and functions
MyConstructor.prototype.PublicFunction = function (params)
//place function code here
;
;
同样,这只是我使用顶部提到的链接为自己制作的模型。
【讨论】:
以上是关于在 Javascript 中定义一个具有命名空间的类的主要内容,如果未能解决你的问题,请参考以下文章