ตัวปรับการเข้าถึงใดที่บ่งบอกโดยนัยเมื่อไม่ได้ระบุ


142

สำหรับแนวคิดต่างๆทั้งหมดที่สนับสนุนตัวปรับแต่งการเข้าถึงเช่นฟิลด์คุณสมบัติเมธอดและคลาสตัวปรับการเข้าถึงใดที่บ่งบอกเป็นนัยหากไม่ได้ระบุ


@basarat เป็นเวลานานแล้วที่ฉันใช้ TypeScript ดังนั้นจึงยากที่จะจำวิธีการทำงานในทุกวันนี้! เท่าที่ฉันจำได้คำตอบของคุณดูสมเหตุสมผล แต่ฉันไม่รู้สึกว่ามันมีอำนาจเพียงพอที่ฉันจะทำเครื่องหมายว่าถูกต้อง คำตอบของคุณมาจากประสบการณ์ของคุณกับภาษานั้น ๆ หรือมาจากข้อมูลในข้อกำหนด?
แซม


1
ในการชี้แจงคำถามและคำตอบนี้ควรระบุ typescript ไว้ในคำถามเพื่อให้ชัดเจน มีแท็ก typescript แต่นั่นเป็นข้อบ่งชี้เดียวที่เราไม่ได้พูดถึง scala, java, C #, C ++, ....
absmiths

คำตอบ:


220

ทุกอย่างในclassคือpublicถ้าไม่ระบุ ทุกอย่างใน a moduleเป็นส่วนตัวเว้นแต่exportจะใช้คำหลัก


6
สำหรับคนที่เล่นด้วยชุดสตาร์ท. บางคนจัดส่งด้วย tslint และอาจทำให้เกิดความสับสนได้ เมื่อคุณเห็นข้อความนี้default access modifier on member/method not allowed ตรวจสอบtslint.jsonเพื่ออนุญาตตัวแก้ไขการเข้าถึงเริ่มต้นหรือโดยนัย
visheshd

1
เป็นไปได้ไหมที่จะใช้ขั้นตอน pre-Transpile เพื่อกำหนดโดยอัตโนมัติprivate?
Qwerty

-4

ฉันไม่เห็นด้วย

ทุกอย่างในชั้นเรียนเป็นสาธารณะหากไม่ได้ระบุไว้

ทุกอย่างเป็นสาธารณะแม้ว่าจะใช้ส่วนตัวก็ตาม เพียงแค่ดูรหัสที่โปร่งใส วิธีการใส่คำอธิบายประกอบส่วนตัวจะเผยแพร่สู่สาธารณะ การขนส่งเท่านั้นที่จะทำให้เกิดข้อผิดพลาด ทั้งภาครัฐและเอกชนจะถูกแปลงเป็น<Object>.prototype.funcName


26
ใช่นี่เป็นจุดที่ดี แต่คำถามของฉันคือมากกว่าwhich access modifiers are implied when not specified can my code be accessed when an access modifier is not specifiedตัวปรับแต่งการเข้าถึงเป็นแนวคิด TypeScript แทนที่จะเป็นแนวคิด JavaScript ดังนั้นฉันคิดว่าคำตอบของ @ basarat ได้กล่าวถึงสิ่งที่ฉันหมายถึงในคำถามและดูเหมือนจะถูกต้องในบริบทของคำถาม บางทีอาจมีช่องว่างให้แยกแยะถ้อยคำในคำถามและคำตอบ
แซม

นั่นเป็นเพียงวิธีการทำงานของ TS มันจะรวบรวมโค้ดของคุณไม่ว่ามันจะ "ถูกต้อง" จากจุดยืนของ TS ก็ตามซึ่งหมายความถึงทุกอย่างใน TS โดยไม่มีข้อยกเว้นสำหรับคลาส แต่ประเด็นหลักคือถ้าคุณเคารพคำเตือนของ TS คุณจะไม่ทำ กำลังเข้าถึงคุณสมบัติที่ทำเครื่องหมายว่าเป็นส่วนตัว
Andrew Bogdanov

4
ฉันนึกไม่ออกว่าภาษาไหนที่เป็นส่วนตัวจริงๆ ใน C # คุณสามารถได้อย่างง่ายดายได้รับข้อมูลส่วนตัวใด ๆ ผ่านภาพสะท้อน ในภาษาระดับล่างเช่น C หรือ C ++ คุณสามารถไปที่ฟิลด์ส่วนตัวได้เพียงแค่เลื่อนพอยน์เตอร์ไปรอบ ๆ ขาดการป้องกันในระดับ OS เช่น DEP และหน่วยความจำเข้ารหัสตัวปรับการเข้าถึงเป็นเพียงความช่วยเหลือจากคอมไพเลอร์ที่ให้มาเพื่อช่วยให้คุณเขียนโค้ดได้ดีขึ้น ...ขวา?
pbarranis

@pbarranis ฟิลด์ JavaScript ส่วนตัวเป็นฟิลด์ส่วนตัวและไม่มีวิธีเข้าถึงจากภายในรันไทม์ JavaScript
Yogu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.