他サイト更新RSSぴぽぺ速報最新記事

コンストラクタについて理解できないんだが、newするとどうなるの?

このエントリーをはてなブックマークに追加 LINEで送る

プログラマかjavascriptわかる奴ちょっと来い

インスタンスとコンストラクタの関係性分かりやすく教えろ

というかnewの使い所が分かんない

Javaしか知らんが来たぞ

>>2
教えてくださいプログラマ様!!

お前なんだその口の聞き方は?
教えてやろうと思ったけど止めた
自分で考えるんだな

>>3
お願いします教えてくださいエッチな画像貼るから教えてください!!

newってなんなんだよ...

オブジェクトやで~

コンストラクタによりインスタンスを生成する

インスタンスは召喚、コンストラクタは召喚した時に付加効果をつけるみたいな

>>15
大元がいてそっから能力だけ色々変えたい時にインスタンスとして呼び出すみたいな?

知らなくてもいじれるから気にすんな

>>16
人に説明できないから困る

function hage(usui ){
this.usui=usui;
}

var hagehage = new hage('kaminoke');
console.log('hagege');

これnewなかったらどうなんの?

>>22
newがなかったらthisにアクセスできないんじゃね?

>>22
hage(usui)は値をreturnしていないので、hagehageはundefinedになる

それはそうとそれだと'hagege'がログ出力されるぞw
console.log(hagehage)じゃねーのかw

>>28
あ、ごめん
間違えたダブルクォーテーションいらないし変数名も間違ってるわ

大元と言うかモンスター(クラス)という概念があるとして、それが召喚(インスタンス化)することによって実体を持って現れる
コンストラクタは儀式みたいな感じ

>>20
てことは別に全く同じ性能見た目のドラゴン作りたいってだけならnewしなくてもそのまま呼んじゃえって事でいいの?

>>27
全然違うな
そして文章が分かりにくいな
インスタンスのことを言ってるのか、コンストラクタのことを言ってるのかさっぱり分からん

それぞれについてどう理解しているか書いてみろ
インスタンス
コンストラクタ

>>33
コンストラクタ 設計図
インスタンス その設計図から作った物

>>37
まあ合ってるな
そこから>>27の理解になる経緯が分からんからその辺り説明しろ

クラス→設計図
インスタンス→実物
new→設計図を元に実物を作る
コンストラクタ→newすると必ず実行される
人間の設計図をもとに、人間をつくるとき
全裸の人間が発生しないように、コンストラクタでパンツを設定する
みたいな感じ?

>>34
そんな感じ

classをnewするとコンストラクタが動いてインスタンスが出来る

>>39
jsってクラスないじゃん?

「コンストラクタ」とかかっこいい名前ついてるけど、所詮は単なる関数なんだよ
関数にコンストラクタとしての機能を持たせるのは「new」の役割

で、その「new」の役割が何かっていうと、「独立した呼び出しスタック上で関数を実行する」もの
「オブジェクトを作って、そこに関数内の計算の途中結果を保存できるようにする」とでも考えると解り易い
でも単に保存しただけだと外から使う事ができないので、「this.property = なんとか」という形で外部から読み取れるようにする

おk?

>>51
全然おkじゃねえ...
コンストラクタとしての機能ってなんぞ

>>54
2行目の「コンストラクタ」は「いわゆる(C++やJavaでいうところの)コンストラクタ」って意味な
「(JavaScriptにおける)コンストラクタ」と『独立した呼び出しスタック上で関数を実行する」もの』は同値だ

この辺国語の授業の内容だからな

>>57
まじでその国語の授業についていけてねえのか俺
言い回しが独特で分かりにくい

そもそも最初にやり始めた時に「値を返す」って書かれてて「返すってなんだよ...ていうか返したからなんなんだよ」ってとこでつまづいた

>>61
そうか……そのレベルだったのかすまん

とりあえず、「普通の関数」の動作はこうだ:

function hoge(a) {
 var piyo = ...; ←「piyo」という変数を作成
} ←勝手にpiyoは消える

なので、関数の結果を求めたければこうする:

function hoge(a) {
 var piyo = ...; ←「piyo」という変数を作成
 return piyo; ←インスタンスを「返す」
} ←勝手にpiyoは消える(インスタンスは消えないので、var x = hoge(0)のようにすればxにインスタンスが設定される)

とりあえずここまでおk?

>>62
おぉこれはわかる
そこまではおk

>>68
次に、thisというキーワードをつけてみる

function hoge(a) {
 this.piyo = a;
}

ところで、「this」というのは「a.b()」みたいにした時、bから見たaのことだ
そして「hoge(0)」というのは実は「window.hoge(0)」の省略形なので、
「hoge(0)」を実行した後は「window.hoge」がaの値……すなわちこの場合は0になってる

ちょっと一気に難易度が上がったかここまで大丈夫か?

>>71ごめんミス
0になってるのはwindow.piyoだな

>>73
動かしてみて理解した!

>>74
よしじゃあ次に本題の「new」いくぜ

さて、newをつけた「new hoge(0)」は「window.hoge(0)」の省略形ではなくなる
厳密には内部で変な事もいろいろやってるが、何か新しいオブジェクトを作り、それをthisとする
すなわち、

var x = hoge(0); ←これは「var x = window.hoge(0);」と同じ
var y = new hoge(0); ←これは「var y = {}; y.hoge(0);」とほぼ同じ(実際にはこの書き方は不可)

ちゃんと動くようにyを書き直すなら、

var y = {};
hoge.call(y, 0); ←callはFunction型のメソッドで、f.call(a, b, c, ...);と書くと「aをthisとしてf(b, c, ...)を呼ぶ」という機能

ちなみに{}はnew Object()の省略形
なんかnewを説明する中にnewが出てきてわけわからん事になってるが、
Object型は特殊な型なのでこれ以上気にする必要はない(っていうか気にすると無限ループにハマる)

>>77
function hoge(a){
this.piyo = a; ←ここの「this」はグローバルオブジェクト(window)
}

new hogeしたら上のthisはhogeを指す

こういうこと?

>>82
var x = hoge(0);の場合は「this==window」でおk

new hoge()の場合はvar y = {};とした場合のyだよ

>>84
あ、これは分かったかも知れん
function hoge(a){
this.piyo = a;
}

var x = new hoge(5)
var y = new hoge(10)
var z = hoge(15)

console.log(x.piyo) //5 newすると関数オブジェクト内のthisはインスタンスを指すから5

console.log(y.piyo) //10 同上

console.log(z.piyo) //newしないと関数オブジェクト内のthisはグローバルオブジェクトを指すから参照できない

>>89
おk

var y = {};
hoge.call(y, 0);

っていう意味がこれでわかったなら、後はID:g5haHuus0がJavaScriptの闇に招待するぞ
この「y = {}」の「{}」の部分を変化させる方法だ
今知る必要はないかもしれんが、必ずどっかで出てくるので読み物程度に流しとけ

JavaかC++をきっちりマスターしてオブジェクト指向なんたるかを会得するべきだな

javascriptは半ば擬似的にオブジェクト指向同等のものを実現できるというだけなので
コンストラクタとかは使う方はいざ知らず作る方はあまり重要ではないと思われ

>>53
やっぱそうなのか
このオブジェクト指向ってのさっぱりだ

ブラウザがオブジェクト指向の言語で作られているとしたら
ボタンを表すButtonクラスとか、フォームを表すFormクラスが定義される
Buttonクラスの属性としてボタンのテキストや色だったり、押したときに呼び出すアクションがあり
Formクラスの属性として縦と横の幅とかがある
ボタンを含むページを表示するときはButtonクラスのインスタンスであるButtonオブジェクトを生成する
このときnew Buttone("送信", submit)だったりnew Buttone("クリア", clear)みたい記述する

>>60
これは理解出来る
なるほどなるほど

Buttonクラスにはコンストラクタが定義されていて
new Button("送信", submit)を実行するとButtonクラスのコンストラクタが呼び出される
そのときに"送信"とsubmitが引数として渡される
コンストラクタは受け取った引数と属性にセットする

>>64
ボタンを作るための(クラス)があります。
実際のボタン(インスタンス)があります。
実際のボタンに色とか大きさとかを設定したいからボタンを作るときに属性を設定する機能(コンストラクタ)を呼びます。

こういうこと?

>>68
コンストラクタがメモリの割り当てまで行う場合もあれば属性の設定だけの場合もある
プログラム言語によって違う

クラスはボタンを表すって表現のほうが適切
ボタンの動作も定義している

大雑把にコンストラクタはオブジェクトを生成するための処理を定義すると理解しときゃ十分だろ

>>69
すげー多機能やん
なるほど少しずつ理解してきたぞ

クラスとコンストラクタってイコールかと思ってた

>>70
オブジェクト指向プログラミングはクラスを組み合わせて作るからな
クラスにコードを記述して
そこから生成したオブジェクトが動いていろいろ起きるって感じだ

クラス、オブジェクト、コンストラクタが分かればオブジェクト指向の第一歩だ

>>72
むずい
入り口でこれか
勉強あるのみだな

>>74
オブジェクト指向は難しいぞ
オブジェクト指向プログラムの設計を正しく行おうとしたら
最低でも数年の勉強と経験が必要
ちゃんと理解しないでプログラマやってる連中なんで腐るほどいるけどな

職業プログラマが来たけどもう解決したみたいだな

何が難しいってjavascriptだとコンストラクタもnewも別に必須じゃないってことなんだよな
これがjavaとかだったら避けて通れない道だから説明もしやすかった訳だが

プログラマからの人ってjs嫌いってよく言ってる

>>110
昔ブラウザがクソなせいてJavaScript嫌われてたからな
そっから触ってない人だろ
うちはウェブ系じゃないけど好きな人何人かいるよ
俺も好きだし

コンストラクタ→オブジェクトが作られる前に初期値設定が必要な変数などがあるときに使うもの
インスタンス→アドレスのようなものいわばオブジェクトの設計図
new→インスタンスを作る合言葉
ってjavaの時習った

これってクラスの使い道分かってて初めて使い所が出てくるってことなの?

>>126
JavaScriptにクラスって概念がそもそもないんよ……
JavaScriptにおいてクラスと似たようなものが、プロトタイプなんすよ

prototypeは動的な値がどんどん入ってきつつ新しいオブジェクトを量産するってイメージなのかな?

>>141
プロトタイプというのは、本来はオブジェクトに指定されたプロパティがない場合のフォールバックを指定する機能
例えば、

function A() { this.hoge = 10; }
var a = new A();
console.log(a.hoge); // 10

これは当たり前

function B() { } // ← this.hoge を設定していない
var b = new B();
console.log(b.hoge); // undefined

これも当たり前
でも、

function C() { } // ← this.hoge を設定していない
C.prototype.hoge = 10;
var c = new C();
console.log(c.hoge); // hogeがないので C.prototype.hoge を見に行って 10

さらにどんどんややこしくすると、

function D() { } // ← this.hoge を設定していない
function E() { } // ← this.hoge を設定していない
D.prototype = new E();
E.prototype.hoge = 10;
var d = new D();
console.log(d.hoge); // hogeがないので D.prototype.hoge を見に行ったけどやっぱりないのでE.prototype.hoge を見にいって 10

>>147
おぉこれは分かりやすい
ただじゃあ実際にどういう場面でと言われると体験してみないと今の所思いつかないな

これはnewも同じだけど

>>148
デフォルトの動作を指定するとかかねえ
入力がもれていたら「項目に入力して下さい」ってメッセージ出すとか

まじで感謝っす
少なくともオブジェクト指向の根本とその周辺の概念理解できたのがかなり大きい

ずーっと詰まってたし

sosu



このエントリーをはてなブックマークに追加 LINEで送る
↑この記事をみんなに広めよう↑

↓ランキングクリックよろしくお願いします↓
 にほんブログ村 2ちゃんねるブログ 2ちゃんねる(ニュース)へ にほんブログ村 2ちゃんねるブログ 2ちゃんねる(ゲーム)へ

コメントをどうぞ

メールアドレス
コメント本文

  • あなたのコメントが、更にこの記事をおもしろくします。

プロフィール

PipopeFavicon

ぴぽぺ速報です。

下らないニュース、
おもしろい事件、
ゲームなど色々扱っております。
1日約70記事です。

Twitter
RSS

↓ランキングクリックよろしくお願いします↓
 にほんブログ村 2ちゃんねるブログ 2ちゃんねる(ニュース)へ にほんブログ村 2ちゃんねるブログ 2ちゃんねる(ゲーム)へ

新着情報

逆アクセスランキング

アクセスカウンター

  • 12現在の記事:
  • 1482588総閲覧数:
  • 210今日の閲覧数:
  • 217昨日の閲覧数:
  • 532330総訪問者数:
  • 152今日の訪問者数:
  • 147昨日の訪問者数:
  • 126一日あたりの訪問者数:
  • 0現在オンライン中の人数:

genzou1919 world