【问题标题】:Define a class with namespace in Javascript在 Javascript 中定义一个具有命名空间的类
【发布时间】:2014-10-06 18:52:45
【问题描述】:

参考https://stackoverflow.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 oop javascript-namespaces


【解决方案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
      };
      

      };

      同样,这只是我使用顶部提到的链接为自己制作的模型。

      【讨论】:

        猜你喜欢
        • 2010-10-12
        • 2014-10-18
        • 1970-01-01
        • 2021-11-10
        • 2011-01-15
        • 1970-01-01
        • 2011-06-03
        • 2014-09-14
        • 2012-05-27
        相关资源
        最近更新 更多