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

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

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

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

Q&A

解決済

2回答

1104閲覧

function有りのメソッドとfunction無しのメソッド?の違いを教えて下さい。

U_0326

総合スコア12

JavaScript

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

0グッド

0クリップ

投稿2018/03/25 01:57

初歩的な質問で申し訳ないのですが、以下教えて下さい。
下記のコードについて、createFileManagerメソッドは、頭に"function"が付いています。
一方でsaveFileメソッドは、頭に"function"が付いていません。

なぜ、頭に"function"が付くメソッドと付かないメソッドが存在するのでしょうか。両者の違いを教えて下さい。// もしかして、saveFileはメソッドではない?

js

1import fs from "fs"; 2 3class FileManager { 4 function createFileManager() { 5 return new FileManager(); 6 } 7 8 saveFile(filePath, text) { 9 return new Promise((resolve) => { 10 fs.writeFileSync(filePath, text); 11 resolve(); 12 }); 13 } 14 15 export default createFileManager; 16} 17

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

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

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

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

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

guest

回答2

0

下記のコードについて、createFileManagerメソッドは、頭に"function"が付いています。

一方でsaveFileメソッドは、頭に"function"が付いていません。なぜ、頭に"function"が付くメソッドと付かないメソッドが存在するのでしょうか。両者の違いを教えて下さい。

掲載のコード自体にいろいろと間違いが含まれていますので、この質問自体が成り立ちません。どこかから拾ってきたコードなのかもしれませんが、このコードは動きません。(動作確認を質問者さんはされてないですよね?)

import fs from "fs";

class FileManager {

// こういう書き方がそもそもできません。よって質問が成り立ちません。
~~ function createFileManager() {
return new FileManager();
}~~

saveFile(filePath, text) {

// 同期処理をしているのにも関わらず、なぜ、あえてPromiseを使うのか意味不明です
~~ return new Promise((resolve) => {
fs.writeFileSync(filePath, text);
resolve();
}); ~~
}
//ここでexportって出来ないのでは?
~~ export default createFileManager; ~~
}

投稿2018/03/25 02:15

編集2018/03/25 02:26
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

U_0326

2018/03/25 05:29

ご回答頂き有りありがとう御座います。仰る通り未動確のコードになります。失礼致しました。
guest

0

ベストアンサー

こんにちは。

簡略化したコードで、まずfunction無しの方から説明します。

javascript

1class A { 2 f() { 3 console.log("hello world !"); 4 } 5}

と書かれていたら、 fAのプロトタイプが持っている関数オブジェクトです。
すなわち、

javascript

1console.log(A.prototype.f instanceof Function);

は、true と表示されます。
Anew を付加して、コンストラクタとして呼ぶことで得られるオブジェクト a

javascript

1const a = new A();

は、a.__proto__A.prototypeであって、これが関数f を持っているので、
aA.prototypeからプロパティf を(プロトタイプ)継承しており、
a をレシーバーとして

javascript

1a.f();

と呼べます。関数であるプロパティはメソッドと呼ばれますので、この 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 02:58

jun68ykt

総合スコア9058

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

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

U_0326

2018/03/25 05:28

ご回答頂き有りありがとう御座います。勉強させて頂きました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問