回答編集履歴

2 文字列について追記

Lhankor_Mhy

Lhankor_Mhy score 9866

2016/12/14 13:37  投稿

##### 1
そうでもないです。
```javascript
var fakeDate = {
 dat : '',
 new :function(dat){
   this.dat = dat;
 },
 getFullYear : function(){
   return this.dat.slice(0,4);
 }
}
fakeDate.new('2016/12/14');
fakeDate.dat; // 2016/12/14
fakeDate.getFullYear(); // 2016
```
ご覧のとおり、javascriptにはthisがありますので、インスタンスを作成していないオブジェクトでも引数を取らないメソッドを書くことができます。
##### 2
もうお分かりかと思いますが、メソッドは呼び出しができる関数オブジェクトとして定義されていますので、引数がなくても関数呼び出しの書式を省略することはできません。
一方でプロパティは、文字列などの呼び出しができないオブジェクトとして定義されていますので、逆に呼び出しをするとエラーになります。
##### yambejpさんへのコメントを受けて追記
> その文字列の長さを返すという行為は決まった属性を返すのではなく、変数に応じて処理をしてくれるため感覚的にはとてもメソッドに近いイメージ
```javascript
var fakeArray = {
 length : 0,
 arr : '',
 new : function(x){
   this.arr = String(x);
   this.length = 1;
 },
 add : function(x){
   this.arr += ',' + String(x);
   this.length += 1; 
 }
}
fakeArray.new(1);
fakeArray.length; // 1
fakeArray.add(2);
fakeArray.length; // 2
```
こんな感じで、「プロパティを変化させるメソッドが存在する」と思えば、納得がいくのではないでしょうか。
こんな感じで、「プロパティを変化させるメソッドが存在する」と思えば、納得がいくのではないでしょうか。
ついでに言えば、文字列の場合、イミュータブルなオブジェクトだと思うので、lengthプロパティが変更されることはないでしょう。
1 yambejpさんへのコメントを受けて追記

Lhankor_Mhy

Lhankor_Mhy score 9866

2016/12/14 13:31  投稿

##### 1
そうでもないです。
```javascript
var fakeDate = {
 dat : '',
 new :function(dat){
   this.dat = dat;
 },
 getFullYear : function(){
   return this.dat.slice(0,4);
 }
}
fakeDate.new('2016/12/14');
fakeDate.dat; // 2016/12/14
fakeDate.getFullYear(); // 2016
```
ご覧のとおり、javascriptにはthisがありますので、インスタンスを作成していないオブジェクトでも引数を取らないメソッドを書くことができます。
##### 2
もうお分かりかと思いますが、メソッドは呼び出しができる関数オブジェクトとして定義されていますので、引数がなくても関数呼び出しの書式を省略することはできません。
一方でプロパティは、文字列などの呼び出しができないオブジェクトとして定義されていますので、逆に呼び出しをするとエラーになります。
一方でプロパティは、文字列などの呼び出しができないオブジェクトとして定義されていますので、逆に呼び出しをするとエラーになります。
##### yambejpさんへのコメントを受けて追記
> その文字列の長さを返すという行為は決まった属性を返すのではなく、変数に応じて処理をしてくれるため感覚的にはとてもメソッドに近いイメージ
```javascript
var fakeArray = {
 length : 0,
 arr : '',
 new : function(x){
   this.arr = String(x);
   this.length = 1;
 },
 add : function(x){
   this.arr += ',' + String(x);
   this.length += 1; 
 }
}
fakeArray.new(1);
fakeArray.length; // 1
fakeArray.add(2);
fakeArray.length; // 2
```
こんな感じで、「プロパティを変化させるメソッドが存在する」と思えば、納得がいくのではないでしょうか。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る