• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:既存オブジェクトに対するプロパティの追加)

既存オブジェクトにプロパティを追加する方法は?

このQ&Aのポイント
  • 既存のオブジェクトにプロパティを追加したい場合、以下の方法があります。
  • (1)自作オブジェクトの場合は、オブジェクトに直接プロパティを追加することができます。
  • (2)一般的なオブジェクトの場合は、Object.prototypeを使用してプロパティを追加することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

 fFolder = Shell.NameSpace(vDir ) のNameSpace メソッドで返されるのは、Object実体ではなく、 Objectへの参照(ポインター)だからだと思います。

mibusys
質問者

お礼

なるほど…。 # var shell = new ActiveXObject("Shell.Application"); # var folderItems = shell.NameSpace(FOLDER_PATH).Items(); 上記で取得できる「オブジェクト」は JavaScriptの管理下で生成したオブジェクトではなく、 別のプログラム(?)で生成したものの参照だから ということですね。 そういわれてみれば、そんな気がしてきました。 ってことで、おそらく直接的な解決方法はない ということですよね…。 ないならないで諦めがつくので「なさそう」 という情報も有用な情報です。 しかしそうであることの確証が無いため 若干すっきりしないところはありますが 参考になりました。ありがとうございました。

その他の回答 (1)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

IEのスクリプトはさっぱりなので、回答になっていませんが… itemはobjectのようですが、直接の拡張方法はわからないので、間接的に  var obj = function() {};  obj.prototype = item;  obj.prototype.newName = "...";  return new obj(); みたいな方法を試みてみましたが、うまくいかないみたい。 どうやら  for (i in item) ~~ としてもitem内の属性を取得できないようなので、通常のobjectとはどうも扱いが違うようですね。 以下のように必要な属性をコピーしたobjectを作成してしまえば、一応、ご希望のように扱うことは可能になりますが、別配列を使っていないというだけで大して変わらないかも。 (必要となる属性はattributeで設定しておく) --------------------------------------- var obj = function(){}; obj.prototype.newName = "..."; obj.attribute = ["Name", "Size", "IsFolder"]; obj.set = function(item) { var a, i=0, o = new obj(); while (a = obj.attribute[i++]) o[a] = item[a]; return o; } var folderItemsArray = []; function ファイル一覧取得() { var FOLDER_PATH = "C:\\WINDOWS"; // ★ファイル・フォルダの一覧取得 var shell = new ActiveXObject("Shell.Application"); var folderItems = shell.NameSpace(FOLDER_PATH).Items(); for (var i = 0; i < folderItems.Count; i++) { var item = folderItems.Item(i); if (!item.IsFolder) { folderItemsArray.push(obj.set(item)); } } 一覧表示(); }

mibusys
質問者

お礼

ありがとうございました。

関連するQ&A

専門家に質問してみよう