我正在寻找在JavaScript中实现以下用例的最佳方法(如果可能的话)。
假设我想配置一些“模型”实体。此类配置可能是某些架构定义或某些验证规则。配置保持在“ModelDef”的范围内。
var ModelDef = new Model({ schema : { name : 'String' }, validation : {} });
然后我希望能够初始化先前定义的“ModelDef”的实例。这一次,我可能会提供一些属性及其值。
var ModelInstance = new ModelDef({ attribute1 : value1, attribute2 : value2 });
到目前为止一切顺利。关键是,我想在两种情况下都使用“new”关键字。虽然前者(“ModelDef”)的情况可以直接实现,但我想知道是否有可能获得第二个调用,它建立在第一个调用的基础上,也可以工作。
答案 0 :(得分:1)
不是,因为JavaScript中没有private
或protected
变量。如果您使用关键字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);