質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1313閲覧

javascriptのメソッドとプロパティの違いについて

yamagata_user

総合スコア40

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/12/09 10:14

txt=document.getElementById("intro").innerHTML;

上記についてですが、最初のgetElementByIdはメソッド、innerHTMLはプロパティですがどちらも処理を行っていると思うのですが、そう考えるとメソッドとプロパティの違いとは何なのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

メソッド, プロパティはいずれもオブジェクト指向プログラミング言語における概念で, それぞれ

  • メソッドはオブジェクト(対象)に対する操作を表す概念
  • プロパティはオブジェクトにおける**属性(設定)**を表す概念

であり, 乱暴に言うと,

JavaScript

1var obj = [なんらか(例えばDOM)のオブジェクト];//操作の対象 2 3//メソッドは関数として中身を操作する 4obj.somemethod(); 5var value = obj.somemethod(); 6 7//プロパティは代入演算子で中身の値を設定・取得する 8obj.someproperty = "何らかの値"; 9var value = obl.someproperty;

となります.

一方, 処理の観点で見るとメソッドもプロパティも外部からアクセスすることでオブジェクトに対して何らかの影響を与えることになります. 例えばinnerHTMLプロパティは値を設定することで対象のノードの中身が書き換わります. そのため, 事実上メソッドもプロパティも(記述の方法が違うだけで)本質的に違いはありません.


で, JavaScriptの世界では言語の実装を単純化するために全てを**「プロパティとして扱う」**取り決めとなっており, Lhankor_Mhyさんがおっしゃっているとおり, 「メソッドはプロパティの値としてファンクション(関数)が格納されているもの」となります.

JavaScript

1var elem = document.createElement("div"); 2elem.querySelector; //←プロパティquerySelectorに入っているのはfunctionオブジェクト 3elem.querySelector("#id");//←メソッドとしてquerySelectorを実行

NOTE:
このようにメソッドを取り扱うのはJavaScript言語特有のアプローチなので, JavaやC#等の他のオブジェクト指向プログラミング言語では通用しません.

NOTE:
メソッドはファンクションが格納されているプロパティである. ならば, メソッドの内容を他の値で書き換えることができるか?
→できます.しかし, 深刻なバグを作り込んでしまう可能性があるため, ある程度JavaScriptに習熟するまでは絶対にしないで下さい.

JavaScript

1var elem = document.createElement("div"); 2elem.querySelector = "間違い";//←querySelectorはプロパティなので値を代入できてしまう 3elem.querySelector("#id");//←でも中身がfunctionオブジェクトでないためメソッドとしては実行できない.

投稿2017/12/09 23:11

defghi1977

総合スコア4756

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamagata_user

2017/12/10 02:42

ご回答ありがとうございます。 メソッドとファンクションが同じだと思ってました。 メソッド内にファンクションが格納されているというのがよくわからないのですが、getElementByIdはgetElementById内部にファンクションを持っているということになりますが、そのファンクションとは何を指しているのでしょうか。
defghi1977

2017/12/10 03:26

ファンクションはJavaScriptにおけるFunctionオブジェクトを指します. 「xxx()」として実行したり, 「function(){~}」として作ったりします. で, document.getElementByIdプロパティ(変数)にはこのFunctionオブジェクトが格納されています. 参考) https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions_and_function_scope ※ここいらへんはJavaScriptの核心に迫る部分で, 理解するのが非常に厄介ではあります.
yamagata_user

2017/12/13 12:53

今の私にはきちんと理解するのが厳しい部分が多々ありますが、もっと学習を深めようと思います。 このたびはありがとうございました。
guest

0

ベストアンサー

仕様によるとこうです。

function that is the value of a property

4.3.31 method

メソッドとはプロパティの値となっている関数のことのようです。なので、getElementByIddocumentのメソッドでありプロパティでもあるということになります。

投稿2017/12/09 10:26

Lhankor_Mhy

総合スコア36057

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamagata_user

2017/12/09 10:41

ご回答ありがとうございます。 getElementByIdはdocumentのメソッドと考えるとすると、同時にgetElementByIdはどのプロパティの値なのでしょうか。 それとなのですが、innerHTMLがメソッドではなくプロパティなのはどうしてなのでしょうか。
karamarimo

2017/12/09 12:41

document は getElementById という名前のプロパティを持っていて、その値としてある関数が入っており、それゆえにメソッドであるということです。 innerHTML プロパティの値は関数ではないので、メソッドではありません。
yamagata_user

2017/12/09 22:51

getElementById はdocumentが持っているプロパティ、と考えるとgetElementById はプロパティということになると思うのですが、そのgetElementById が自身の値として、内部に関数を持っているということですよね? その場合、メソッドはそのgetElementById 内部にある関数ということにならないでしょうか。 そしてその内部にある関数とは何を指しているのでしょうか。
karamarimo

2017/12/10 08:04

> メソッドはそのgetElementById 内部にある関数ということにならないでしょうか 内部というか、プロパティの名前と値は対になっており、プロパティとその値はしばしば同一視されると思いますので、getElementById プロパティはメソッドであるということです。 > そしてその内部にある関数とは何を指しているのでしょうか。 何とはどういうことでしょうか?ブラウザによって決められたある関数が入ってます。
Lhankor_Mhy

2017/12/11 01:52

javascriptに話を限定します。 > getElementByIdはどのプロパティの値 プロパティとはキー・バリューと定義されていましたから、 { getElementById: function(){/* ネイティブコード */} } がプロパティ、 function(){/* ネイティブコード */} がメソッドといえるかと思います。 実際の用語の使い方としては、 o.v = 1; o.f = function(){ return 1 }; というコードにおいて、 「v は o のプロパティ」と使い、 「1 は o のプロパティ」と使わず、 「f は o のプロパティ」と使わず、 「f は o のメソッド」と使い、 「function(){ return 1 } は o のメソッド」と使う、 ことが多いと思います。 定義と多少乖離しますが、世の中そんなものでしょう。 > innerHTMLがメソッドではなくプロパティなのはどうしてなのでしょうか 気持ちはわかります。どう見てもメソッドっぽい振る舞いですからね。 推測なのですが、Node という Document の上位インターフェイスがあり、そのプロパティに innerText というプロパティがあるのですが、これはその動作を考えるとプロパティであることが適切であるように思います。 その拡張で、innerHTML ができたのだと思うのですが、継承するインターフェイスの統一感と重視してプロパティになったとだと思います。誕生の経緯としてもIEの独自実装先行だったと思いますので、そういった事情もあるのかな、と。
yamagata_user

2017/12/13 12:54

なんとなくですが考え方がわかったように思います。 きちんと理解するには自己学習がもっと必要だと思いました。 このたびは大変詳しく教えてくださり本当に助かりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問