fork download
  1. /**
  2.  * 疑似クラス getter, setter型
  3.  *
  4.  * @version 1.0.1
  5.  * @author think49
  6.  * @url http://v...content-available-to-author-only...a.com/notebooks/javascript/Class_prototype_private-variable.html
  7.  */
  8.  
  9.  
  10. /**
  11.  * ベースとなるスーパークラス (親クラス)
  12.  */
  13. function Base (name) { // 仮引数 name はプライベート変数となる
  14. this.getName = function getName () { // プライベートメソッド
  15. return name;
  16. };
  17.  
  18. this.setName = function setName (inputName) { // プライベートメソッド
  19. name = String(inputName);
  20. };
  21. }
  22.  
  23.  
  24. /**
  25.  * サブクラス1 (子クラス1)
  26.  */
  27. function Sub1 (message) { // 仮引数 message はプライベート変数となる
  28. this.getMessage = function getMessage () { // プライベートメソッド
  29. return message;
  30. };
  31.  
  32. this.setMessage = function setMessage (inputMessage) { // プライベートメソッド
  33. message = String(inputMessage);
  34. };
  35. }
  36.  
  37. Sub1.prototype = new Base('myName1-1'); // Base を継承する
  38.  
  39.  
  40. /**
  41.  * サブクラス2 (子クラス2)
  42.  */
  43. function Sub2 (message) { // 仮引数 message はプライベート変数となる
  44. this.getMessage = function getMessage () { // プライベートメソッド
  45. return message;
  46. };
  47.  
  48. this.setMessage = function setMessage (inputMessage) { // プライベートメソッド
  49. message = String(inputMessage);
  50. };
  51. }
  52.  
  53. Sub2.prototype = new Base('myName1-2'); // Base を継承する
  54.  
  55.  
  56. /**
  57.  * 出力
  58.  */
  59. function output (name, value) {
  60. print(String(name) + ': ' + String(value));
  61. }
  62.  
  63.  
  64. /**
  65.  * 検証
  66.  */
  67. function test () {
  68. var base, sub1, sub2;
  69.  
  70. base = new Base('myName1');
  71. output('base.name', base.name); // undefined
  72. output('base.getName()', base.getName()); // "myName1"
  73. output('base.hasOwnProperty("getName")', base.hasOwnProperty('getName')); // true
  74.  
  75. print('');
  76.  
  77. sub1 = new Sub1('myMessage1-1');
  78. sub2 = new Sub2('myMessage1-2');
  79.  
  80. output('sub1.getMessage()', sub1.getMessage()); // "myMessage1-1"
  81. output('sub2.getMessage()', sub2.getMessage()); // "myMessage1-2"
  82. sub1.setMessage('myMessage2-1');
  83. sub2.setMessage('myMessage2-2');
  84. output('sub1.getMessage()', sub1.getMessage()); // "myMessage2-1"
  85. output('sub2.getMessage()', sub2.getMessage()); // "myMessage2-2"
  86.  
  87. output('sub1.hasOwnProperty("getMessage")', sub1.hasOwnProperty('getMessage')); // true
  88. output('sub2.hasOwnProperty("getMessage")', sub2.hasOwnProperty('getMessage')); // true
  89.  
  90. print('');
  91.  
  92. output('sub1.name', sub1.name); // undefined
  93. output('sub2.name', sub2.name); // undefined
  94. output('sub1.getName()', sub1.getName()); // "myName1-1"
  95. output('sub2.getName()', sub2.getName()); // "myName1-2"
  96. sub1.setName('myName2-1');
  97. sub2.setName('myName2-2');
  98. output('sub1.getName()', sub1.getName()); // "myName2-1"
  99. output('sub2.getName()', sub2.getName()); // "myName2-2"
  100.  
  101. output('sub1.hasOwnProperty("getName")', sub1.hasOwnProperty('getName')); // false
  102. output('sub2.hasOwnProperty("getName")', sub2.hasOwnProperty('getName')); // false
  103. }
  104.  
  105. test();
  106.  
Success #stdin #stdout 0.25s 214528KB
stdin
Standard input is empty
stdout
base.name: undefined
base.getName(): myName1
base.hasOwnProperty("getName"): true

sub1.getMessage(): myMessage1-1
sub2.getMessage(): myMessage1-2
sub1.getMessage(): myMessage2-1
sub2.getMessage(): myMessage2-2
sub1.hasOwnProperty("getMessage"): true
sub2.hasOwnProperty("getMessage"): true

sub1.name: undefined
sub2.name: undefined
sub1.getName(): myName1-1
sub2.getName(): myName1-2
sub1.getName(): myName2-1
sub2.getName(): myName2-2
sub1.hasOwnProperty("getName"): false
sub2.hasOwnProperty("getName"): false