こんにちは。
簡略化したコードで、まずfunction
無しの方から説明します。
javascript
1class A {
2 f() {
3 console.log("hello world !");
4 }
5}
と書かれていたら、 f
は A
のプロトタイプが持っている関数オブジェクトです。
すなわち、
javascript
1console.log(A.prototype.f instanceof Function);
は、true
と表示されます。
A
に new
を付加して、コンストラクタとして呼ぶことで得られるオブジェクト a
javascript
1const a = new A();
は、a.__proto__
が A.prototype
であって、これが関数f
を持っているので、
a
はA.prototype
からプロパティf
を(プロトタイプ)継承しており、
a
をレシーバーとして
と呼べます。関数であるプロパティはメソッドと呼ばれますので、この f
は、
(A
をコンストラクタとして作られたオブジェクトの)メソッドになります。
参考のため、上記の説明の検証コードを以下に上げました。
https://jsfiddle.net/jun68ykt/L5qhp3vt/4/
次に、function ありのほうですが、
javascript
1class A {
2 function f() {
3 console.log("hello world !");
4 }
5}
は文法エラーになります。試しに上記を
test_NG_A.js
に保存して node で実行してみると、以下のようなエラーメッセージが表示されました。
/usr/local/bin/node /Users/jun68ykt/repos/tera118885/test_NG_A.js
/Users/jun68ykt/repos/tera118885/test_NG_A.js:2
function f() {
^
SyntaxError: Unexpected identifier
at new Script (vm.js:51:7)
at createScript (vm.js:138:10)
at Object.runInThisContext (vm.js:199:10)
at Module._compile (module.js:626:28)
at Object.Module._extensions..js (module.js:673:10)
at Module.load (module.js:575:32)
at tryModuleLoad (module.js:515:12)
at Function.Module._load (module.js:507:3)
at Function.Module.runMain (module.js:703:10)
at st
Process finished with exit code 1
以上、参考になれば幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/25 05:29