คำถามติดแท็ก private-members

30
คุณสมบัติส่วนตัวในคลาส JavaScript ES6
เป็นไปได้หรือไม่ที่จะสร้างคุณสมบัติส่วนตัวในคลาส ES6 นี่คือตัวอย่าง ฉันจะป้องกันการเข้าถึงได้instance.propertyอย่างไร class Something { constructor(){ this.property = "test"; } } var instance = new Something(); console.log(instance.property); //=> "test"

25
การเข้าถึงตัวแปรสมาชิกส่วนตัวจากฟังก์ชั่นที่กำหนดต้นแบบ
มีวิธีใดที่จะทำให้ตัวแปร "ส่วนตัว" (ที่กำหนดไว้ในตัวสร้าง) พร้อมใช้งานสำหรับวิธีที่กำหนดต้นแบบ? TestClass = function(){ var privateField = "hello"; this.nonProtoHello = function(){alert(privateField)}; }; TestClass.prototype.prototypeHello = function(){alert(privateField)}; งานนี้: t.nonProtoHello() แต่นี่ไม่ใช่: t.prototypeHello() ฉันเคยกำหนดวิธีการของฉันภายในตัวสร้าง แต่ฉันย้ายออกไปจากที่ด้วยเหตุผลสองสาม

10
ทำไมคลาส Java ภายนอกสามารถเข้าถึงสมาชิกส่วนตัวของคลาสภายในได้
ฉันสังเกตว่าคลาสภายนอกสามารถเข้าถึงตัวแปรอินสแตนซ์ส่วนตัวของคลาสภายในได้ เป็นไปได้อย่างไร? นี่คือตัวอย่างรหัสที่แสดงให้เห็นถึงสิ่งเดียวกัน: class ABC{ class XYZ{ private int x=10; } public static void main(String... args){ ABC.XYZ xx = new ABC().new XYZ(); System.out.println("Hello :: "+xx.x); ///Why is this allowed?? } } เหตุใดพฤติกรรมนี้จึงอนุญาต

10
เหตุใดเขตข้อมูลส่วนตัวจึงเป็นประเภทส่วนตัวไม่ใช่เช่นนั้น
ใน C # (และภาษาอื่น ๆ อีกมากมาย) การเข้าใช้ฟิลด์ส่วนตัวของอินสแตนซ์อื่นประเภทเดียวกันนั้นถูกต้องตามกฎหมาย ตัวอย่างเช่น: public class Foo { private bool aBool; public void DoBar(Foo anotherFoo) { if (anotherFoo.aBool) ... } } เนื่องจากข้อกำหนดC # (ส่วน 3.5.1, 3.5.2) ระบุว่าการเข้าถึงฟิลด์ส่วนตัวอยู่ในประเภทไม่ใช่อินสแตนซ์ ฉันกำลังคุยเรื่องนี้กับเพื่อนร่วมงานและเรากำลังพยายามหาเหตุผลว่าทำไมมันถึงใช้งานได้ (แทนที่จะ จำกัด การเข้าถึงอินสแตนซ์เดียวกัน) อาร์กิวเมนต์ที่ดีที่สุดที่เราสามารถหาได้คือการตรวจสอบความเท่าเทียมกันซึ่งคลาสอาจต้องการเข้าถึงฟิลด์ส่วนตัวเพื่อกำหนดความเท่าเทียมกันกับอินสแตนซ์อื่น มีเหตุผลอื่นอีกไหม? หรือเหตุผลทองบางอย่างที่หมายความว่ามันต้องทำงานอย่างนี้หรือบางสิ่งจะเป็นไปไม่ได้อย่างสมบูรณ์?

4
เหตุใดฉันจึงใช้รถยนต์เป็นประเภทส่วนตัว
ฉันรู้สึกประหลาดใจอย่างยิ่งที่โค้ดต่อไปนี้รวบรวมและทำงาน (vc2012 & gcc4.7.2) class Foo { struct Bar { int i; }; public: Bar Baz() { return Bar(); } }; int main() { Foo f; // Foo::Bar b = f.Baz(); // error auto b = f.Baz(); // ok std::cout << b.i; } ถูกต้องหรือไม่ว่ารหัสนี้รวบรวมได้ดี และทำไมมันถูกต้อง? เหตุใดฉันสามารถใช้autoกับประเภทส่วนตัวในขณะที่ฉันไม่สามารถใช้ชื่อได้ (ตามที่คาดไว้)

7
เข้าถึงเขตข้อมูลที่สืบทอดส่วนตัวผ่านการสะท้อนใน Java
ฉันพบวิธีรับสมาชิกที่สืบทอดผ่าน class.getDeclaredFields(); และเข้าถึงสมาชิกส่วนตัวผ่านclass.getFields() แต่ฉันกำลังมองหาเขตข้อมูลที่สืบทอดแบบส่วนตัว ฉันจะบรรลุเป้าหมายนี้ได้อย่างไร?

7
เหตุใดออบเจ็กต์ของคลาสเดียวกันจึงเข้าถึงข้อมูลส่วนตัวของกันและกันได้
เหตุใดออบเจ็กต์ของคลาสเดียวกันจึงเข้าถึงข้อมูลส่วนตัวของกันและกันได้ class TrivialClass { public: TrivialClass(const std::string& data) : mData(data) {}; const std::string& getData(const TrivialClass& rhs) const { return rhs.mData; }; private: std::string mData; }; int main() { TrivialClass a("fish"); TrivialClass b("heads"); std::cout << "b via a = " << a.getData(b) << std::endl; return 0; } รหัสนี้ใช้งานได้ เป็นไปได้อย่างสมบูรณ์แบบสำหรับวัตถุ a ในการเข้าถึงข้อมูลส่วนตัวจากวัตถุ …

11
สมาชิกส่วนตัวใน CoffeeScript?
มีใครรู้วิธีสร้างสมาชิกส่วนตัวแบบไม่คงที่ใน CoffeeScript บ้างไหม ตอนนี้ฉันกำลังทำสิ่งนี้ซึ่งเพิ่งใช้ตัวแปรสาธารณะที่ขึ้นต้นด้วยขีดล่างเพื่อชี้แจงว่าไม่ควรใช้นอกคลาส: class Thing extends EventEmitter constructor: (@_name) -> getName: -> @_name การใส่ตัวแปรในคลาสทำให้เป็นสมาชิกแบบคงที่ แต่ฉันจะทำให้ตัวแปรไม่คงที่ได้อย่างไร เป็นไปได้หรือไม่โดยไม่ต้อง "แฟนซี"?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.