• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javascriptのObject()コンストラクタについて質問です。)

javascriptのObject()コンストラクタについて質問です。

15mmの回答

  • 15mm
  • ベストアンサー率65% (65/100)
回答No.3

var obj2 = Object();の使い方がコンストラクタなのか、内部処理は知りません。 私の解釈では、 ・new classA(args...) はclassAのインスタンスを生成(コンストラクタ) ・classA(B) はBをclassAの型に変換する です。パッと思いつくのでは、1+Number("1")とかいう変換。newあっても同じですが・・・ さて、本題(IEで検証中)。 >どこかのサイトでこの2つは等価みたいな記事を読んだような気がするのですが そんなわけないです。たとえまったく同じ構造のオブジェクトを作ったとしても ({x:1,y:2})===({x:1,y:2})//false メモリ内での参照先が違えば===はfalseを返すと思います。(プリミティブ型は別問題。1===1、"a"==="a") >Objectコンストラクタでオブジェクトを作る際はnew演算子は要らない? 上記のとおり、コンストラクタを呼び出したいのか、変換をしたいのか、それによる。 でもjavascriptは型に厳密なほうじゃないので、あまり関係ないかも。 (私はactionscript3.0で差を実感) newつけたほうがコードとしての見栄えはよくなるし、 共同制作なんて時の為にもnewを付ける癖はあってよいと思います。 (「初期化子」便利ですよー なんて言ってみる) >2つの違いを色々試したのですが違いがわかりません objectはすべての元となる型だから、例を変えますね。 var str1=new String("a")//Stringのオブジェクトを生成(コンストラクタの引数:"a") var str2=String("a")//文字列"a"をString型に変換 alert([typeof(str1),str1 instanceof String])//object,true あくまでStringオブジェクト alert([typeof(str2),str2 instanceof String])//string,false newでコンストラクタを呼ばないとinstanceにはならない alert(str1===str2)//型が違うのでfalse でも、それがどうした・・・?(自問) たぶん、オブジェクトの生成方法(内部処理)が違うのでしょう。 typeof(Object)が"function"なんですから。(意味が違うかも) 不十分さが拭えませんが、結論。 Object()がそれっぽいものを作る関数で、new Object()がinstanceを作る正規のコンストラクタ。 Date()なんて、文字列を返す関数でしかない(笑) 引数も受け付けてくれないし。 actionscriptとイメージ違うな・・・

poyon8989
質問者

お礼

ご回答ありがとうございました。 データ型の知識不足でご回答をいただきました内容を 理解するのに時間がかかってしまいました。 Object()はオブジェクトを返す関数ということで、 なんとなくわかってきた気がします! どうもありがとうございました。

関連するQ&A

  • javascriptを只今勉強中なのですが、オブジェクトについてこんが

    javascriptを只今勉強中なのですが、オブジェクトについてこんがらがってしまいました。 var obj = new Object(); var obj2 = {}; Object.prototype.prop1 = "hoge"; obj,obj2共にprop1にhogeがセットされるのですが、オブジェクトリテラルのobj2は Objectコンストラクタのインスタンスと解釈できるのでしょうか?? new演算子について色々とfirebugで調べていたところこの疑問が出てきました。 newなしでもインスタンスができるのでしょうか? オブジェクトを理解していないので意味不明な質問かもしれませんが どなたかアドバイスいただけると嬉しいです。

  • javascript new演算子について質問があります。

    javascript new演算子について質問があります。 只今javascript勉強中なのですが、どこかのサイトでnew演算子は悪いパーツとの 記事を読みました。 そこでnew演算子を使用せずにオブジェクト生成の方法を試行錯誤考えてみたのですが (IE用に__proto__もなしで)例えば以下コードはアリなコードでしょうか?? あるいはありえない感じでしょうか?? またnewが悪なのはインスタンスを作る時にnewを付け忘れると、 グローバルな汚染をしてしまうということだけなのでしょうか?? オブジェクトとプロトタイプの理解に苦しんでいるところなので 色々と曖昧なのですが、どなたかどうぞご教授お願い致します。 var obj = {}; obj.method = function(){ this.prop1 = "hoge" return this; }; obj.method.prototype = obj.method(); obj.method.prototype.prop2 = "fuga"; var obj2 = obj.method(); console.log(obj2)

  • javascriptでオブジェクトのメソッドを使う

    JavaScriptでnewでオブジェクト化したクラス(?)のメソッド、フィールドを利用する方法を教えて下さい。 javascriptにもオブジェクト化という考え方があると聞いたのですが、 例えば、Javaでいうsetter getterのようなメソッドを作り、使用することはできるのでしょうか? 下記のようなコードを実行したところ Uncaught TypeError: Object #<mousePosi> has no method 'setPara' というエラーが出てしまい、setParaというメソッドはない。と言われてしまいます。 しかし、mousePosi()をオブジェクト化することはできているようなので、 setParaとgetParaを使えるのではないかとおもいました。 どなたかアドバイス下さい。お願いします。 ------------------------------------------------------------------------------------------------- (function LineMain() { console.log("マウスの位置座標を表示"); // console.log("X座標=" + mymouse.x + ",Y座標=" + mymouse.y); //マウスムーブでeventControlを呼び出し addEventListener("mousemove", eventControl, false); function eventControl(event) { var event = event; var myMousePosi = new mousePosi(); myMousePosi.setPara(event); // console.log("X座標=" + obj.getMouse().x + ",Y座標=" + obj.getMouse().y); } function mousePosi() { var paraMouse = { x : 0, y : 0 }; function setPara(event) { this.paraMouse.x = event.x; this.paraMouse.y = event.y; } function getPara() { return this.paraMouse; } } })();

  • インスタンスオブジェクトとは何かについて教えて!!

    下記内容はあるサイトのインスタンスについての説明文です。 画像は、自分なりに理解したものです。 (1)メモリ上には記憶場所(=ポインタ)はない (2)var Aa = new Bb("13" , "smole");とscript内に追加されたことにより メモリ上に記憶場所(=ポインタ)が作成され、 BbオブジェクトつまりBb("13" , "smole");がその記憶場所(=ポインタ)に入る (3)そしてBb("13" , "smole");が入った 記憶場所(=ポインタ)にAaという名前を付ける。 考え方に間違いがあるでしょうか? ---------------------------------------------------- var Aa = new Bb("13" , "smole"); これは、BbクラスオブジェクトのBbコンストラクタをnew演算子を利用して起動しています。 new演算子は、メモリ上に記憶場所を確保して、Bbオブジェクトを作成した後、そのポインタを返す演算子です。 new演算子から返されたポインタは、Aaへ格納されます。この場合のAaをBbオブジェクトのインスタンスといいます。 また、new演算子でメモリ上に記憶場所を確保して作られたオブジェクトをインスタンスオブジェクトといいます。 つまり、 オブジェクト == インスタンスオブジェクト で、 インスタンス != インスタンスオブジェクト インスタンス != オブジェクト です。 ----------------------------------------------------

  • オブジェクト指向について質問

    メインのクラスをインスタンスする際にコンストラクターに書かれている処理が実行されますが、オブジェクトが生成された時のイベントに書くのと、どのような違いがありますか? public partial class Form1 : Form{ public Form1()//コンストラクター {処理1} private void Form1_Load(object sender, EventArgs e)//インスタンス時のイベント {処理2} } また、別クラスの中でnewを使ってインスタンスがされ場合、コンストラクターと上記のイベントは同じように発生しますか? public class Form2{ Form1 = new Form1(); } よろしくおねがいします。

  • javascriptのconstructorプロパティについて

    constructorプロパティとは、 オブジェクトの初期化で使用されたコンストラクタ関数を参照 とのことなので、下記2パターンのPGを作成しました 1.prototypeの明記なし function Hoge(){ this.init = "Hogeで初期化"; this.getInit = function(){ return this.init; } } var obj = new Hoge(); alert(obj.constructor == Hoge); for(prop in obj){ alert( prop + " - " + obj[prop]); } //実行結果 True init - Hogeで初期化 getInit - function () { return this.init; } 2.prototypeの明記あり function Hoge(){ this.initialize.apply(this,arguments); this.init = "Hogeで初期化"; this.getInit = function(){ return this.init; } } Hoge.prototype ={ initialize:function(){ this.init = "Hoge.prototype.initializeで初期化"; }, getInit:function(){ return "Hoge.prototype.getInit()"; } } var obj = new Hoge(); alert(obj.constructor == Hoge); for(prop in obj){ alert( prop + " - " + obj[prop]); } //実行結果 false init - Hogeで初期化 getInit - function () { return this.init; } initialize - function () { this.init = "Hoge.prototype.initialize\u3067\u521D\u671F\u5316"; } ・質問内容 prototypeの明記なしの場合は、Hogeのコンストラ関数を参照している(結果がTrueのため) prototypeの明記ありの場合は、falseのためコンストラ関数を参照していないのですが、 prototype明記あり、なしで結果が異なる理由が分からない状態です。 (prototype.constructorにも手を出したのですが、上記が解決しないため  constructorプロパティに関してのみ質問した次第です) ネット、書籍等で調べたのですが、検討がつかない状態です。 お手数ですが、ご教授お願い致します。

  • JavaScriptでインスタンスを比較してみたい

    JavaScriptでインスタンスを比較してみたいのですが、色々分からないことがあるので教えてください。 ■質問1 ・そもそも、JavaScriptにインスタンスはあるのでしょうか? ■質問2 ・下記で「hoge1」「hoge2」はインスタンスではないのでしょうか?(単にオブジェクトを取得しているだけ?) var myApp = {  point: 0,  setPoint: function(p){   this.point= p;  },  getPoint: function(){   return this.point;  } }; myApp.point = 5; var hoge1 = myApp.getPoint(); var hoge2 = myApp.getPoint(); console.log( hoge1 === hoge2 ); // true ■質問3 ・「Object.create」か「new」すれば、インスタンス生成できる? ■質問4 ・インスタンスの比較はどうやるのでしょうか? ・「===」?

  • オブジェクト 

    JavaScriptのオブジェクトについて。初心者です。 オブジェクトは順番がない、という仕様ですが。 何かアルゴリズムで、順番(定義した順)に取り出せないでしょうか? var obj={ "su":"tanaka", "ro":"suzuki", "en":"honda" } console.log(???(obj)); tanaka,suzuki,honda

  • constructorプロパティとオブジェクト関係

    JavaScriptのconstructorプロパティについて教えてください。 ・constructorプロパティは、内部プロパティ[[Construct]]と同義でしょうか? ・constructorプロパティが存在しない組込オブエジェクトは、「Global」「Math」「JSON」の三つだけ? ・上記以外の組込オブエジェクトは、全てnewできる、ということでしょうか? ・「new Object」「new Function」できるのは、constructorプロパティがあるから、という理解で合っているでしょうか?

  • javascriptのコードについて

    以下のコードなのですが、 エンクロージャー関数の ローカル変数hogeをさらに、エンクロージャー内部で定義された 関数ででクロージャーとして保持させたいメソッドのコードですが var Method = function (){ var hoge = "初期値"; var getter = function (){ return hoge; } var setter = function (param){ hoge = param; return hoge; } return {"set" : setter,"get" : getter} } var obj = Method(); console.log(obj); console.log(obj . get()); obj.set("初期値変更"); console.log(obj.get()); obj . set("更に変更"); console.log(obj.get()); この場合、メソッドの返り値として、一般的な文献に乗っている関数(関数オブジェクト)を返すのではなく オブジェクトリテラルとして返しています。 この場合でも、動きとしてはクロージャーの動きをしているのでhogeという変数の保持はできているっぽいんですが クロージャーって関数内で定義された関数であれば、どういう返り値の返し方でも クロージャーになるのですかね? また、この方法は、一般的にjsで関数コンストラクタ呼び出しをしてインスタンスを作る際privateメンバを実現する方法として紹介されていますが、 これはクロージャーとして生成するたんびに内部の変数を保持するためメモリ食い虫になるらしいのですが まず間違いなく、このクラス(便宜上そう呼びます)のインスタンスはひとつしかつくることはない!!という仕様だとしても いけないのでしょうか? というかもう現状javascripのバッドノウハウ的なものになっているのでしょうか?