0

このコードを名前空間に変換して、よりクリーンにし、グローバル名前空間の汚染を回避しようとしています。私はこれにかなり慣れていないので、次のコードをjavascript名前空間に変換する方法について少しガイダンスや例を使用できます。

function Validator(fields) {
     this.fields = fields;
}

Validator.prototype.validate = function(form) {
  for(var i = 0, l=this.fields.length; i < l; i++) {
    alert(this.fields[i].value);
        if (this.fields[i].value == 0) {
            alert("The field  is empty");
            return false;
        }
    }
}

var validator = new Validator([ "username", "password"]);

function runValidate(form) {
validator.validate(form);
    }

(検証に対するこのOOアプローチが過剰であることを私は知っています!)この「runValidate(this.form)」のようなフォームのボタンからこのrunValidateを呼び出します。

4

2 に答える 2

2

名前空間は、たとえば単なるjavascriptオブジェクトです。

var myNamespace = {};
myNamespace.Validator = function(fields) {
   ...
}
myNamespace.Validator.prototype.validate = function(form) {
   ...
}
于 2013-02-27T10:35:08.360 に答える
1

Javascriptにはネイティブの名前空間はありませんが、プレーンで単純なオブジェクトを使用してそれをシミュレートできます。名前空間ユーティリティ関数の簡単な実装は次のとおりです。

function namespace(namespaceString) {
  var nodes = namespaceString.split('.'),
      parent = window,
      currentNode;    

  for(var i = 0, length = nodes.length; i < length; i++) {
    currentNode = nodes[i];
    parent[currentNode] = parent[currentNode] || {};
    parent = parent[currentNode];
  }

  return parent;
}

次のように使用できます。

var MyApp = namespace("MyApp");
MyApp.Validator = function(fields) {
  this.fields = fields;
}

var validator = new MyApp.Validator(["username", "password"]);
// this also works:
var validator = new namespace("MyApp.Validator")(["username", "password"]);

これにより、グローバル名前空間を汚染することはなくなりますが、いくつかのグローバル変数が残りますMyApp。この場合は、名前空間内の他のルートノードです。

于 2013-02-27T10:50:02.160 に答える