在新的Model()上返回一个函数,然后能够再次在该返回的函数上调用new?

时间:2013-10-01 23:25:35

标签: javascript

我正在寻找在JavaScript中实现以下用例的最佳方法(如果可能的话)。

假设我想配置一些“模型”实体。此类配置可能是某些架构定义或某些验证规则。配置保持在“ModelDef”的范围内。

var ModelDef = new Model({ schema : { name : 'String' }, validation : {} });

然后我希望能够初始化先前定义的“ModelDef”的实例。这一次,我可能会提供一些属性及其值。

var ModelInstance = new ModelDef({ attribute1 : value1, attribute2 : value2 });

到目前为止一切顺利。关键是,我想在两种情况下都使用“new”关键字。虽然前者(“ModelDef”)的情况可以直接实现,但我想知道是否有可能获得第二个调用,它建立在第一个调用的基础上,也可以工作。

1 个答案:

答案 0 :(得分:1)

不是,因为JavaScript中没有privateprotected变量。如果您使用关键字this,则其他实例将具有访问权限。但是,您可以使用关键字var创建无法使用private (点)访问者访问的.范围。此外,您不能将已执行的构造函数实例分配给变量,然后创建它的新实例,除非原始构造函数返回如下面这个讨厌示例的构造函数。

function what(c){
  this.a = function(){
    return function(){
      this.b = c;
    }
  }
}
var nasty = new what('test').a();
var testit = new nasty().b;
console.log(testit);