不想污染对象的原型。如何使用名称空间的原型继承?

时间:2015-12-22 07:20:40

标签: javascript

我不想用我所有库的方法污染对象的原型。我想将它们隐藏在__namespace属性中。

当您尝试访问对象属性时,如果它未定义,它将查找原型链,如此

a.c -> a.prototype.c -> a.prototype.prototype.c ..

我想实现

a.__namespace.c -> a.prototype.__namespace.c, a.prototype.prototype.__namespace.c ...

例如:

function A(){};
A.prototype.__namespace = {};
A.prototype.c = 2; // normal 
A.prototype.__namespace.c = 2; // inside namespace

var a = new A();
a.__namespace = {};
console.log(a.c) // prints 2
console.log(a.__namespace.c); //undefined. Would like to print 2.

是否有javascript功能允许此其他而不是创建它:

function NameSpace(){}
NameSpace.prototype.c = 3;

var a = new A();
a.__namespace = new NameSpace();
console.log(a.__namespace);

选中fiddle

1 个答案:

答案 0 :(得分:0)

我只是Fiddled并想出了那个。我不能100%确定它是否符合您的意图。

基本上我将prototyped函数存储在prototype的单个属性中。

SomeObject.prototype.someNamespace = Object.create(SomeOtherObject.prototype);

当然,SomeOtherObject必须有污染的原型。

ATTEMPT 2

我试过了again。这是你想要的吗?