2016-04-04 17 views
0

Bir nesnede kullanılabilir işlev istiyorum, ancak eğer konsol.log veya başka bir işleve gönderirseniz görünmüyorum.Javascript'teki nesne üzerinde "Gizli" işlev

var obj = function() { 
    this.name = 'Bob'; 
    this.age = 23; 
} 
obj.prototype.say = function() { 
    console.log(this.name, this.age, 'thats me..'); 
} 

var pers = new obj(); 
console.log(pers); // { name: 'Bob', age: 23 } 
pers.say(); // Bob 23 thats me.. 

Bunun için iyi bir çözüm ve iyi uygulama olur mu? Ya da javascript'te bunu başarmanın daha iyi bir yolu var mı?

+0

Bu onu görünmez yapmaz diye düşünüyorum. Sadece "prototip" etiketini tıkladığınızda krom –

cevap

0

Nesneyi kaydettiğinizde, prototip kullanılarak oluşturulan işlevler de görünür olacaktır. Bu bağlamda yapabileceğiniz tek şey, this kullanarak yapıcınızdaki işlevleri oluşturmak ve bir closure oluşturmaktır. Ve bu işlevler, prototip işlevlerin aksine nesne örnekleri arasında paylaşılan işlevler olmayacaktır. Yani, fonksiyonun değişimi tüm nesne örneklerinde yansıtılmayacaktır.

var obj = function() { 
    this.name = 'Bob'; 
    this.age = 23; 
    function privateTest(){ alert("hai"); } 
    this.test = privateTest; 
} 
+1

'test'ündeyseniz halka açıktır. –

+0

@NinaScholz Ancak privateTest görünür olmazdı. Buradaki nokta budur. –

+0

Çözümünüzü kaydettiğimde (bu durumda düğüm çalıştırıyorum): {name: 'Bob', yaş: 23, test: [İşlev: privateTest]} – RickBrunstedt

İlgili konular