2015-12-22 16 views
0

我不想用我所有圖書館的方法來污染對象的原型。我想將它們隱藏在__namespace屬性中。不想污染對象的原型。如何讓原型繼承w /命名空間?


當您嘗試訪問對象的屬性,如果它是不明確的,它會查找原型鏈,像這樣

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. 

Is there一個JavaScript功能,使這個其他不是創造什麼樣子:

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

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

檢查這個fiddle

+3

您正在通過初始化a.namespace = {} –

+0

來覆蓋命名空間的值。這纔是重點。 – Ludo

+0

如果你想要父母的價值,你不需要做a.namespace = {} –

回答

0

我只是Fiddled左右,想出了。我不是100%確定是否它是你的意圖。

本質上,我將prototyped函數存儲在prototype的單個屬性中。

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

當然,SomeOtherObject必須有一個污染原型。

未遂2

我試過again。這是你想要的嗎?

+0

感謝您的回答,但事實並非如此。檢查更新的問題。 – Ludo