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

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

新規登録して質問してみよう
ただいま回答率
85.51%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

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

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

解決済

1回答

2151閲覧

外部変数をfor文して読み込みnewして使う方法を教えて下さい

kazuyu

総合スコア18

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

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

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

1グッド

0クリップ

投稿2015/12/09 08:59

編集2015/12/09 09:05

下記オブジェクトリテラルを外部ファイルに記載して
必要個数分だけ、ループして各々別々のDBデータを
入れたいのですが、オブジェクトリテラルは参照型
なので1箇所値を変更するとfor文の全ての値も変わって
しまいます。

【外部オブジェクトリテラル Z.jsを定義】

module.exports = {

A : {

B : {

id : '',

key : '',

val : '',

img : '',

},

C : {

id : '',

key : '',

val : '',

img : '',

},

},・・・上記のようなオブジェクトリテラルを繰り返しnewしてオブジェクトを生成すればよいという話で完結しそう
ですが、new require ('./Z.js')では「Object is not Ffunction」と怒られてしまいますし、上記外部オブジェクトリテラルを以下のような関数型で定義すると子・孫function以下に記載した変数がなぜか読み取られません。

【関数内に変数を持たせる内容に修正した外部変数 Y.js】

module.exports = function () {

this.A = function A () {

this.B = function() {

var id若しくはthis.id = '';

var key若しくはthis.key = '';

var val若しくはthis.val = '';

var img若しくはthis.img = '';

},

this.C = function() {

var id若しくはthis.id = '';

var key若しくはthis.key = '';

var val若しくはthis.val = '';

var img若しくはthis.img = '';

};

};

}

var H = [];

for ・・・ {

H.push (new require ('./Y.js') )
}ですと参照型でなく個別の外部変数が入りますがthis.A内のid, key, val, imgなどundefinedと定義されていないと怒られてしまいます。

上記に関して、Z.jsのオブジェクトリテラルを必要な個数分、別途コピペでZ0.js, Z1,js, Z2.js・・・と作成して
for文を回して外部ファイルを読み取りまくれば参照型であっても独立した(競合しない)オブジェクトリテラルとして
扱うことが叶い一応目的は達成できますが、オブジェクトリテラルの構造を変更しようとしたときのメンテナンスが面倒なので
Y.jsのようなnewで生成する実装を実現したいと思っています。

上記解決策がお分かりでしたらご教示をお願い致します。

afroscript👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

Node.js触ったことないし、確かめる環境もないけどたぶんこういうことだろう。

Z.js :関数定義

Javascript

1module.exports = function(){ 2 this.B = { 3 id : '', 4 key: '', 5 val: '', 6 img: '' 7 }; 8 this.C = { 9 id : '', 10 key: '', 11 val: '', 12 img: '' 13 }; 14};

Javascript

1var A = require('./Z.js'); 2 3var array = new Array(10); 4for(var i=0; i < array.length; i++) { 5 array[i] = new A(); 6} 7 8array[5].B.id = 'five'; 9array[3].B.id = 'three'; 10 11console.log(array[5].B.id); 12console.log(array[3].B.id);

Object is not function

いわゆるオブジェクトはnewできない。

H.push (new require ('./Y.js') ) }ですと参照型でなく個別の外部変数が入りますがthis.A内のid, key, val, imgなどundefinedと定義されていないと怒られてしまいます。

スコープの関係で関数の中の変数は見えない。

おしいとこまで来てた。

投稿2015/12/09 10:10

nage

総合スコア144

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

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

kazuyu

2015/12/09 12:15

素晴らしい回答です!ありがとうございます。 超短時間の修正で望みのプログラムコードが手に入りました。 >スコープの関係で関数の中の変数は見えない。 このアドバイスも役立ちました。 なるほどスコープでundefinedになっていたんですね。
nage

2015/12/09 13:04

ごめんなさい。スコープ云々は適当です。 まさかそこに食いつかないだろうと思って適当に書きました。 本当はこっちです。 functionは実行時にはじめて中身がメモリ上に展開(マッピング)されます。 function内の変数はそのときようやく実体化するのです。 そういうわけでfunctionの外から見てる時点ではその中の変数は存在していません。未定義(undefined)です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問