JavaScript JScriptってどうよ
■ このスレッドは過去ログ倉庫に格納されています
0001Mr. J
NGNGhttp://pc.2ch.net/test/read.cgi/win/1021566844/l50
JScript.Netなんてのもありますよね。
JScriptはブラウザのあるところならどこにでもあるので軽く知ってお
くと便利な気もするんですけど。
↓Windows スクリプト テクノロジのヘルプから引用
JScript
インターネット向けに特別に開発された Microsoft の強力な
スクリプト言語です。JScript.NET は Microsoft の ECMA
262 規格に準拠した次世代の言語です。ECMAScript Edition
4 と併せて現在開発が進められている JScript.NET では、完
全コンパイル済みコード、型付き変数および型なし変数、クラ
ス (継承、関数のオーバーロード、プロパティ アクセサなど)、
パッケージ、クロス言語のサポート、.NET Frameworks へのア
クセスなど、さまざまな改良が組み込まれています。
JavaScript関係の勉強ができる所
ttp://member.nifty.ne.jp/aya/
ttp://www.tokumaru.org/JavaScript/index.htm
Script Encoderの落とせる所
http://msdn.microsoft.com/downloads/default.asp?URL=/downloads/sample.asp?url=/msdn-files/027/001/789/msdncompositedoc.xml
Script Decoderの落とせる所(使ったことないです)
http://www.astalavista.com/hacking/win/scrdec.shtml
0002デフォルトの名無しさん
NGNG<SHINE>
,,,,,,,,,,,,,,,∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,,,,ミ,,゚Д゚彡< Delphiばんざーい
UU"""" U U \_________
</SHINE>
</XML>
0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNGブラウザで動作させられるし。
ファイルへのアクセスが出来ればもっと便利なんだけどな・・・
0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNGないよね...
0007デフォルトの名無しさん
NGNG0008Mr. J
NGNGご存じないのかもしれませんけどJavaScriptはclassを定義で
きるんです。
例えばどこにいてもWeb上にclass群を置いておけば再利用きる
んです。(インターネットを利用できれば)
外部読みこみの"*.js"のファイルは関数を投げ込んでおくのに
しか使えないわけではないです。
0009デルパイ氏ね ◆VB6.V49.
NGNG0010Mr. J
NGNGちゃんとできます。
ここにも書いてあるんですけど。
http://pc.2ch.net/test/read.cgi/win/1021566844/l50
//class Horse
function Horse(name, age, isMale){
this.name = name;
this.age = age;
this.isMale = isMale;
this.toString = HorseToString;
}
function HorseToString(){//Horse classのメンバ関数toString
var str = this.name + "は" + this.age + "歳(" + ((this.isMale) ? "オス" : "メス") + ")";
return str;
}
//class Zebra extends Horse
function Zebra(name, age, isMale, stripeCount){
//スーパークラスのコンストラクタ呼び出し
Horse.call(this, name, age, isMale);
//追加されたメンバ変数の初期化
this.stripeCount = stripeCount;
}
var h = new Horse("Bill", 4, true);
var z = new Zebra("Jane", 3, false, 382);
var fso, file, fileName;
fileName = "utuda.txt";
fso = new ActiveXObject("Scripting.FileSystemObject");
file = fso.createTextFile(fileName, true, false);
file.writeLine(h);
file.writeLine(z);
file.close();
new ActiveXObject("WScript.Shell").run(fileName);
//参照を解除してごみにする。
fso = file = null;
0011デフォルトの名無しさん
NGNG単体ではファイルもビデオメモリも操作できない言語は
やはりマウスストーカーで終わり
0012Mr. J
NGNGclassとか継承とか言い出すと範疇を外れてしまうんです。
JScriptはWebだけじゃなくてWSHとかHTAとかFLASHとかいろんな所で使えますから。
0013デフォルトの名無しさん
NGNG走らせるのってあんまメリットない気がする
(ある意味mozillaはすごい。). 実行系を
事実上標準装備しているのはWindowsだけだし、
Windows上でOSの各種サービスを使うならVBScriptの
ほうがしっくりくる。構文とかはVBScriptより
JScriptのほうが好きだけど。
0014Mr. J
NGNGVBScriptについて詳しくないですし、私の知っている範囲で
はVBScriptは変数とかオブジェクトの宣言と同時に初期化で
きないので面倒なことになります。
0015デフォルトの名無しさん
NGNGそれどっちかというとWSHの力だよな。
JavaScript、JScript、JScript.NETを
WEBブラウザで使うのかWSHで使うのか.NET Framework上で使うのか
とかはっきりしないと中途半端なスレで終わるような気がするけど。
しかもWEBブラウザを対象にするなら板違いだし、
WSHなら他にスレあるけど盛り上がってないし。
0016デフォルトの名無しさん
NGNGでもsage
0017デフォルトの名無しさん
NGNG0018hc2 morf ◆8XVajy8s
NGNGなぜHSPスレでJScript・・・?
0019デフォルトの名無しさん
NGNGなくて、プロトタイプ方式じゃないの?
>>10 のコードもぱっと見でそんな感じするんだけど。
JScriptでなんか構文の拡張とかあったの?
0020デフォルトの名無しさん
NGNGJScript+WSH > 将来性なし+制限多し
JScript.NET > ウマー
0021Mr. J
NGNGWebとは関係なく走らせるんじゃなくてWebでもWSHでも
FLASHでもHTAでも再利用可能なオブジェクトを作成で
きるといいたいわけです。
0022デフォルトの名無しさん
NGNGJavaに近い構文のクラス定義が出来るようになったよ
0023デフォルトの名無しさん
NGNG無理だろ。
0024デフォルトの名無しさん
NGNG「プログラムできました」とかいって全コードを載せるのは控えて欲しい。
http://pc.2ch.net/test/read.cgi/win/1009175619/964-965
0025デフォルトの名無しさん
NGNGソース全く上げずに他言語攻撃するよりはまったりしていてよし。
0026Mr. J
NGNGWSHでなくてもclassは再利用できるんです。
ファイルの出入力を強調したいわけじゃなくてclassの再利用について強調したいんです。
>>10
を見てもらえばわかるようにクラスを作成してWeb上に置いておけば誰でも
いつでも再利用できるんです。
0027デフォルトの名無しさん
NGNG「全コード」って言ってるやん。
要は他の言語スレと同じ。要点まとめろと。
0028デフォルトの名無しさん
NGNGActiveXコントロールのがまだいいや
(´∀` )
002919
NGNGうーん、でも >>10 のコードを見る限り ECMA262 のプロトタイプ
の範疇だと思うんだけど、JScriptで追加されたクラス定義の
やりかたを誰か教えてくれないでしょうか。
0030Mr. J
NGNG申し訳ないです。プロトタイプ方式というのを知りません。
0031デフォルトの名無しさん
NGNGhttp://www.microsoft.com/japan/msdn/columns/scripting/scripting07142000.asp
近いかな?ちゃんと読んでないけど。
0032デフォルトの名無しさん
NGNGclass Car
{
// クラス メンバを宣言します。この例では型を使用しましたが、
// 使用しなくてもかまいません。クラスを 'expando' としてマークすれば、
// これらのメンバを宣言する必要はありません。
var make : String;
var color : String;
var year : int;
// 古いコンストラクタ関数はそのまま。
function Car(make, color, year)
{
this.make = make;
this.color = color;
this.year = year;
}
// 関数をクラス内に移動します。
function GetDescription()
{
return this.year + " " + this.color + " " + this.make;
}
}
// 新しい Car オブジェクトを作成して使用します。
var myCar = new Car("Accord", "Maroon", 1984);
print(myCar.GetDescription());
http://www.microsoft.com/japan/msdn/columns/scripting/scripting07142000.aspより
0033デフォルトの名無しさん
NGNG0034デフォルトの名無しさん
NGNG割と望まれてる子だし。JS.NET。
0035デフォルトの名無しさん
NGNG0036Mr. J
NGNGはじめはどうなるかとドキドキして必死でがんばりました。
0037デフォルトの名無しさん
NGNGこれまでもあったのか?
0038デフォルトの名無しさん
NGNGVBScriptはMS製品の共通言語でしょ?
WordでもExcelでもASPでも使うし。
0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNG中途半端に普及して・・・。
0041デフォルトの名無しさん
NGNG0042デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNG旧VBプログラム(Notプログラマ)コンバータ。
0044デフォルトの名無しさん
NGNG0045デフォルトの名無しさん
NGNGSet Object=object
ああこれぞオブジェクト
0046デフォルトの名無しさん
NGNGJavaScriptとJScript、JScript.NETの共通部分なんて微々たる物だし、
JavaScriptならWeb、JScriptならWSH、JScript.NETなら.NETそれぞれのスレに話が行くし
0047デフォルトの名無しさん
NGNG>JScript.NETなら.NET
逝かないから困ってるんですが?
0048デフォルトの名無しさん
NGNGせっかく良スレになってきてるのに沸いてくるなよ。
004919
NGNGありがとう、そうか、classって識別子を導入したんだね。
>>30
クラス方式ってのはclass定義をあらかじめ行ってから
オブジェクトを生成するやり方。プロトタイプ方式は
オブジェクトを生成してから、あと付けでプロパティや
メソッドをがんがん追加していくやり方。
prototypeプロパティを使い始めるとクラスを使っていた
わけじゃないのが理解できると思う。
005019
NGNGを読むとわかるかも。それか、この人が書いた
http://www.ascii.co.jp/books/detail/4-7561/4-7561-3871-3.html
か。
0051デフォルトの名無しさん
NGNG0052Mr. J
NGNG丁寧な解説ありがとうございます。実は、JavaScriptの勉強
をするのにJavaの本を買ったりして勉強したんです。という
かJavaScriptの解説本を読んでJavaScriptを理解できる人は
天才だと思います。なにしろ、いきなり関数の再起呼び出し
をやってるコードを示してVBより簡単とかいってますから。
普通new演算子が出てきた時点でJava本に走ると思います。
0053デフォルトの名無しさん
NGNG0054デフォルトの名無しさん
NGNGだからな、スレ違いなんだよ。
0055デフォルトの名無しさん
NGNG糞スレばかり上がってるな(´∀` )
0056Mr. J
NGNGオブジェクト指向の考え方は書いたコードをいかに効率的に再利
用するかという要請によって誕生したと理解しているので、
Web, WSH, FLASHなどで再利用できるとしたら結構素敵かと思って。
知ったらみんなちょっとうれしいかな。なんて考えただけです。
0057デフォルトの名無しさん
NGNGスレ違い。
>>52
JavaScriptの本ってほとんどWeb系の本ばっかりだから、
純粋に言語として扱っている本がないのは致命的。
誰か久野先生以外の本、知ってたら教えて下され。
0058デフォルトの名無しさん
NGNG> 知ったらみんなちょっとうれしいかな。なんて考えただけです。
やっぱうれしがるのはWEB板の人かなぁなんて思うのよね…
0059Mr. J
NGNGJava言語プログラミングレッスン(上)(下)
参考としては
明解C言語入門
0060デフォルトの名無しさん
NGNGブラウザをフォームに見立てれば、立派なプログラミング言語だと思うが。
0061Mr. J
NGNGJava言語プログラミングレッスン(上)(下)
結城 浩 (著)
参考としては
明解C言語 入門編
柴田 望洋 (著)
0062Mr. J
NGNGどこいきゃいいんだ?
0063デフォルトの名無しさん
NGNGフサギコと心中も一興
0064デフォルトの名無しさん
NGNG周りの空気読めてないし。スレ違いだってみんなが指摘
しているのになぜ続けるか。再利用の話もうわっつら
な理解だけで言葉を並べているだけ。とりあえず、落ち着け。
Javascriptのスレがあること自体には反対しません。はい。
0065デフォルトの名無しさん
NGNG需要があれば自ずから(略
0066デフォルトの名無しさん
NGNG0067デフォルトの名無しさん
NGNG0068Mr. J
NGNG気が短くて申し訳ありません。
別に知識をひけらかしたくて参考文献を示したわけではないです。
ちょっとした皮肉のつもりでした。
JScriptは正規表現をサポートしておりWindows環境のあるところな
らどこでもつかえる便利な言語であると認識しています。Perlでい
いという人もいるでしょうけど普通Perlはサーバーよりの環境にし
か突っ込まれていません。それに、普通UNIXのあるところにしかな
いですしね。JScriptのほうが設置ベースが大きいのです。それに
会社のパソコンの管理なんかやるにしても開発環境が無料というの
は結構お得だと考えます。
0069デフォルトの名無しさん
NGNGつーかご高説は聞きたくない。実になる話をしてオクレ。
0070デフォルトの名無しさん
NGNG0071デフォルトの名無しさん
NGNGWSHにしてもmozilla(rhino)にしてもそれぞれ独自のやり方でしか
ファイルアクセスできない。手軽に正規表現でテキスト処理できる
って感じじゃないんだよなぁ。だから常用のスクリプトにはしてないや。
使うのは、特定のファイルのコピーのやり方をメールで指示するときに
.jsファイルをメールに添付して「ダブルクリックしろ!」とかいうときくらいだ。
0072Mr. J
NGNGですから、そういうことについて語ってほしかったわけです。
別に俺が教えてやるといっているわけじゃないんですから。
0073デフォルトの名無しさん
NGNGhttp://sash.alphaworks.ibm.com/
http://www-124.ibm.com/developerworks/oss/sashxb/
007471
NGNG解説してくれんか? 理解できん。
>>73
IBMも処理系ネタ好きだよね。alphaworksみていると、それ業務で
やってんのかってのがいろいろあって楽しい。
0075デフォルトの名無しさん
NGNG皆にそういった話題をして欲しかったってことじゃないの?
絡んでるわけじゃないと思われ。
スレ終了に持って逝きたがる輩が多いからね。
0076Mr. J
NGNG申し訳ないです。あなたは別に煽ってもいませんし私の落ち度です。
ちょっと気が立ってました。反省してます。
0077デフォルトの名無しさん
NGNGttp://www.geocities.co.jp/SiliconValley-PaloAlto/5042/
JavaScriptで圧縮とか暗号化とかしてみる
ttp://www.goice.co.jp/member/mo/amuse/javascript/expert/
0078デフォルトの名無しさん
NGNG>リローダーっす。(悪用厳禁)
>http://www.hoops.livedoor.com/~himajin_ch/reloader.htm
0079デフォルトの名無しさん
NGNGECMAScript Language Specification, 3rd edition
http://www.ecma.ch/ecma1/STAND/ECMA-262.HTM
書籍で個人的によかったのは
「JavaScript第3版」David Flanagan(オライリー)
0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNGJavascript + JScriptはともかくとして、
JS.NETは混同してはいけないだろう。
VBとVB.NETを同じスレで扱うようなもの。
0082デフォルトの名無しさん
NGNG何が問題かわからん
途中から説明してくれ
0083デフォルトの名無しさん
NGNG本気でオブジェクト指向しようとすると記述がものすごく面倒なのがつらい。
tokumaru.netの継承サンプルとかすごいよ。
実用的なコードを出すとプラットフォーム依存になってしまうがそれでも良いか。
Flashは知らないし。
あとJScript.Net使うくらいならC#を使いたいところ。
VSAではC#使えないらしいので、JScript.Netも出番ありか。
0084デフォルトの名無しさん
NGNGニュースサーバ msnews.microsoft.com
グループ名
microsoft.public.dotnet.languages.jscript
microsoft.public.dotnet.vsa
microsoft.public.inetsdk.programming.scripting.jscript
microsoft.public.scripting.jscript
compならcomp.lang.javascript
fjならfj.comp.lang.javascriptだが、ほぼ死んでいる。
0085デフォルトの名無しさん
NGNGコピペして.jsで保存>cscript hoge.js
function hoge1(){
this.showName = showName;
function showName(){return "hoge1";}
function showName2(){return "hoge1_";}
}
function hoge2(){}
function hoge2_showName(){return "hoge2";}
hoge2.prototype.showName = hoge2_showName;
function hoge3(){}
function hoge3_showName(){return "hoge3";}
hoge3.showName = hoge3_showName;
WScript.Echo(new hoge1().showName());
WScript.Echo(new hoge2().showName());
WScript.Echo(hoge3.showName())
//以下はエラーになる
WScript.Echo(new hoge1().showName2());
WScript.Echo(new hoge3().showName());
0086Mr. J
NGNGclass Horse{
String name;
int age;
boolean isMale;
Horse(String name, int age, boolean isMale){
this.name = name;
this.age = age;
this.isMale = isMale;
}
public String toString(){
return this.name + "は" + this.age + "歳";
}
}
class Zebra extends Horse{
int stripeCount;
Zebra(String name, int age, boolean isMale, int stripeCount){
super(name, age, isMale);
this.stripeCount = stripeCount;
}
public static void main(String[] args){
Horse h = new Horse("Bill", 4, true);
Zebra z = new Zebra("Jane", 3, false, 382);
System.out.println(h);
System.out.println(z);
}
}
0087Mr. J
NGNGこのヘルプはJScriptとVBScriptのランゲージリファレンスを含みます。
http://www.microsoft.com/japan/msdn/scripting/default.asp
昨日ここらを紹介しなかったのはまずかったと反省しています。
紹介すればもっと有意義な議論になったかもしれないのに。
0088デフォルトの名無しさん
NGNGJavaとか関係ないやん。
0090デフォルトの名無しさん
NGNG0091Mr. J
NGNGJScriptはコンストラクタと関数の区別がはっきりしないんです。
>>10のコードでメンバ関数はfunction HorseToString()だけで
function Horseおよびfunction ZebraはJavaで言うところのコ
ンストラクタに相当するといいたいわけです。
0092デフォルトの名無しさん
NGNGそれって誰か質問したんか?
「JScriptにコンストラクタはあるんですか?」とか。
なんだか>>1が講釈たれたくてageてるだけのスレに見えるんだよなぁ。
0093デフォルトの名無しさん
NGNGいや、その通りでしょ。
0094デフォルトの名無しさん
NGNGやった方がいいと思うよ。
この板で新しく立てるなら「JScript.NET」に絞ったほうがいいと思う。
0095デフォルトの名無しさん
NGNGWEBやFLASHで使えるって利点をアピールするのは正論だとは思うのだけど
やっぱWEB板の方がユーザも多いと思うし盛り上がると思うんだよね。
需要が無いのにage続けてるとうざがられるだけだし、
少しでも需要がある場所に行った方がよいと思う。
JavaScript、JScript、同.NETを一緒にして純粋に言語だけを語るのは
難しいんじゃないかなぁ。
しかも2chて質問するときに自分の環境を書くことなんてまず無いから
「それってJavaScriptの話?JScript?.NET?WSH使う?WEB?」
みたいな質問返しの応酬の予感。
0096デフォルトの名無しさん
NGNG0097Mr. J
NGNGなんか利点を強調したくて焦点が絞れなかったみたい。
別に講釈をたれたかったわけじゃなくて、
JScriptで面白いことをやれたらいいなと思っただけ。
Javaを持ち出したのは、JavaScriptのオブジェクト指向的な部分は
Javaからのパクリだからというのと自分の説明の仕方が悪くてまと
もな議論になっていないように見えたので、ここの人にはJavaを持
ち出して説明したほうがよかったと反省したから。
自分がたまにJavaのライブラリから考え方をパクッて使ったりするので、
CLRからも考えをパクると面白いかと思って。
とりあえず、私の不徳のいたすところで皆さんに迷惑をかけました。
私的にはには終了ということにしたいです。
なにか苦情とかがあればお答えしますけど。
0098デフォルトの名無しさん
NGNG>JavaScriptのオブジェクト指向的な部分はJavaからのパクリだからというのと
ぜんぜん違うよ。上のほうでクラス方式とプロトタイプ方式
っていう分類を持ち出していた人いたように、Javascriptは
Javaに比べてもっと即興的なもの。Javaみたいなクラス方式?
は、オブジェクトの集団を分類するでしょ。つまりなにかの
オブジェクトは特定のクラスに属する。で、言語としても
それをサポートする構文規則が存在する。でもJavascriptには
それはないの。
たとえば、>>10 の
var h = new Horse("Bill", 4, true);
ってあるけど、結局これは、hというオブジェクトに対して
プロパティとメソッドを付け加えるためのfunctionにあとで
再利用できるためにHorseという名前が付いているだけ。
これをJavascriptでは、コンストラクタとよんでいるけど
Javaのそれとは意味が違う。だから、生成したあとの
h が、Horseクラスに属するとかそういう概念はないわけ。
共通のメソッドとプロパティを持っているオブジェクトの
集団は生成できるし、それをひっくるめることでJavascriptにおける
クラスの概念としても別にかまわんけど、構文規則として
それをサポートしているものはないの。だから、Horse functionと同じ
内容で違う名前のHorse1 functionってのが
あったとして、
new Horse("Bill", 4, true);
new Horse1("Bill", 4, true);
は見分けられない。Horse.call(this, name, age, isMale);
も単にHorseを使って新たなプロパティの追加を行っているだけ。
prototypeを使い始めるとわかるとおもうけど、あれも
クラスの継承とは違うんだよ。荒い言い方すると、
あるオブジェクトから、あるプロパティを取り出すときに
名前探索する範囲を他のオブジェクトが持っているプロパティ
まで広げられるってだけ。だからinstanceofみたいな
キーワードもあるけど、使い方はクラス方式とはぜんぜん違う。
#以上は、ECMA262 3ed.までの話だから、4ed.ではclassが...
#とかいう突っ込みはなしね。
みたいなことを理解しないと、Javascriptのオブジェクト指向
の話はできないよ。ってことでちょっと空回りしていた感も
あるんで、1はしばらく頭冷やすのがよいとおもわれ。1が自分で
いうように終了しろとまではいわんけどね。戻ってくるもよし、
そのまま立ち去るもよし。
0099デフォルトの名無しさん
NGNGWSHはhttp://pc.2ch.net/test/read.cgi/tech/1010400289/
があるから、ココはJScript.NETスレにして再利用すれば?
0100100
NGNG0101デフォルトの名無しさん
NGNG.NETだと4ed.ベースになるみたいだし、スレタイからJavascriptは外したいとこ
だなぁ。.NET以外に実装し始めた処理系ってないよね?
とりあえず、このまま方向性決めずに放っておいて、.NETの話が多いなら
スレ立て直す、沈んでいくならそれもよし、Webネタ、WSHネタ
ばっかりだったら板違いってことでこのスレは沈めるってのは?
0103デフォルトの名無しさん
NGNG0104デフォルトの名無しさん
NGNGまぁ、なるようになるさ。それが2ch。
0105デフォルトの名無しさん
NGNG>var h = new Horse("Bill", 4, true);
>ってあるけど、結局これは、hというオブジェクトに対して
>プロパティとメソッドを付け加えるためのfunctionにあとで
>再利用できるためにHorseという名前が付いているだけ。
hというオブジェクトにHorseオブジェクトへのポインタを格納するんじゃないですか?
prototype方式の概念等は理解できます。
0107デフォルトの名無しさん
NGNGHorseオブジェクトって何よ
0108デフォルトの名無しさん
NGNG自作のオブジェクト
0109デフォルトの名無しさん
NGNGオブジェクトって言葉の使い方が怪しいが・・・
prototype方式にはC++などのようなクラスの概念はないの
> var h = new Horse("Bill", 4, true);
は h のさすオブジェクトの初期状態を決めるだけで
そのオブジェクトには好きなだけ新しいプロパティやメソッドを追加したり変更したりできる
0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNGそれはわかるです。
クラス方式でいうオブジェクトとかインスタンスとかじゃなくて、
JSのオブジェクトってことだったんです。
あと、CLOSもプロトタイプ方式なんですか?
0113デフォルトの名無しさん
NGNGこういう書き方をしている人ってどれくらいいる?
function Hoge( a,b,c )
{
// 非公開
var m_a = a;
var m_b = b;
var privateFunction = function(){ .... }
//公開
this.c = c;
this.getA = function(){ return m_a; }
this.getB = function(){ return m_b; }
}
話題とずれてるので sage
0114デフォルトの名無しさん
NGNG以下のように多重継承と、インターフェース実装を足して
2でわったような感じのコードが書ける
function A(a)
{
var m_a = a;
this.getA(){ return m_a; }
}
function B(b)
{
var m_b = b;
this.getB(){ return m_b; }
}
function Hoge( a, b )
{
var m_key;
var m_objA = new A(a);
var m_objB = new B(b);
for( m_key in m_objA ) this[m_key] = m_objA[m_key];
for( m_key in m_objB ) this[m_key] = m_objB[m_key];
}
…無意味?
0115デフォルトの名無しさん
NGNG0116デフォルトの名無しさん
NGNG簡単な事をやるにはいいけど、部品を拡張していく記述をするのに
手間が掛かるね。
あと、型無しの言語でいっぱいユーザー定義型を使ってると、
記述が不明瞭になってちょっと嫌だな。JScript.NETみたく、
EcmaScript Edition4っぽい拡張しても、記述が冗長な気がするし。
ま、いいか。(ぉぃ
0117デフォルトの名無しさん
NGNG(゚∀゚)うぉっ
捜し求めていた情報がこんなところに・・・
0118ち ◆A2MadQ16
NGNG0119デフォルトの名無しさん
NGNGローカル変数がどう作用するかわかってそのコードを書いてる?
0120デフォルトの名無しさん
NGNGhttp://www.mamezou.com/tec/Tips/jsgl/
C++のテンプレートを移植してるっぽい。しょぼいけど。
0121113-1114
NGNG×this.getA(){ return m_a; }
○this.getA = function(){ return m_a; }
Bも同じです…早く気づけよ>自分(鬱
>>119
たぶん114のことを言っていると思われるので。
えーと、Hoge は m_objA と m_objB の公開されてるメンバ(メソッドorプロパティ)と同じ
名前のメンバを作成し、そこに m_objAのメンバを代入すると思いましたが。
(故にメンバ名が被ると、上書きされる)
とはいえ、 Hoge の getA の中身が「function(){ return m_a; }」となっているところが
やや気にはなりますが、期待通りの動作をするので、
Hoge の getA は、実際は m_objA の getA を呼び出すという解釈をしているのですが。
見当外れのことを言っていたり、間違っていることを言っていたらご教授願います。
完璧に理解しているわけではないので…
0122厨房もじらー
NGNG{
// 非公開
var m_a = a;
var m_b = b;
var privateFunction = function(){ .... }
//公開
this.c = c;
this.getA = function(){ return m_a; }
this.getB = function(){ return m_b; }
}
このコンストラクタを抜けた時点でローカル変数m_a, m_b, privateFunction
がスコープ外に抜けて無効になるような気がするけど
もしかして漏れの勘違いかな。。。
0123デフォルトの名無しさん
NGNG選択されますが、それを「いいえ」にする方法ってあるのでしょうか?
0124デフォルトの名無しさん
NGNGプロトタイプ型のオブジェクト指向知らない俺ですが俺もそう思います。
初心者の質問から新たな議論が起こることもしばしばと言うことで解説して下さいな。
0125デフォルトの名無しさん
NGNG上のコード読んでみると違うっぽい。
多分function -> classに読み替えればスッキリするかと。
クラスの宣言とコンストラクタが同時に書けているんですな。
0126123
NGNGデフォルトで「キャンセル」が選択されている状態にしたいのですが、
調べてもなかなか出てこないもので。
0127デフォルトの名無しさん
NGNG質問、クラスAとクラスBに同名のメソッドなりフィールドがあった場合、前のメンバが隠匿されません?
単なる継承と理解。
0128113-114
NGNGvar value = new Hoge( 10, 20 );
とした場合、value(空のObject) の this ポインタを Hoge に渡し、
Hoge のコンストラクタで value を初期化(※1)をしているので、
Hoge のコンストラクタが終了しても、value には影響を及ぼさないと。
だから、value のローカル変数は、value 自体がスコープを抜けて
クリアされるまで保持されるはず、と考えてるんだけど。
期待通りに動いているので、訊かれるまで考えもしなかったよ(^^;
※1
JScript の特徴として、実行前にすべての変数がチェックされ、その後初期化されるので
value に Hoge のメンバすべてが作成されたあと、Hoge のコードを上からたどっていって、
初期化されている部分があれば、value のメンバを初期化する考えているのだが。
0129113-114
NGNGばっちり上書きされます。
しかも、A と B のローカル変数を Hoge は直接見ることが出来ないので、
継承といえるかどうかも微妙。
なんか、面白い使い方できないかなと思っただけなので。
0131デフォルトの名無しさん
NGNGなるほど。
でも、プロトタイプ型って言うのもなかなか柔軟でおもしろそうですね。
勉強になりました。
0132デフォルトの名無しさん
NGNG自分で作ったやつだけ素通りさせるにはどうしたらいいの?
0133128 の※1の続き
NGNGfunction Test(str)
{
var m_s1 = str;
var m_s2 = "test";
var m_strJoin = join();
var join = function(){ return m_s1+m_s2; }
this.toString = function(){ return m_strJoin; }
}
は、エラーになってしまう訳です。
正常に動作させるには m_strJoin と join の順番を逆にしなければいけないと。
0134デフォルトの名無しさん
NGNGなるほど、手続き型プログラミングの原則1・順次を無視しちゃいけませんな。ってゴルァ!。
0135デフォルトの名無しさん
NGNG0136厨房もじらー
NGNG今試してみたらそうなった。
JavaScript(JScript)って奥が深いのね。。。
確かにnew Hoge(1,2)などと呼び出されるときのfunction Hoge()は
コンストラクタだから、関数のスコープで考えるのが間違いだったかも。
勉強になりました。ななしさんで書き込めばよかったと思ってます(鬱
0137119
NGNGその通りですよ。
問題は113の非公開と書いてあるところ。この変数はいわゆるクラススコープなので
この書き方は使い物にならない。やはりプロパティとして保持させるしかない。
>>122
ローカル変数も実は、あるオブジェクトのプロパティだったはず。常に実態はある。
もちろん直接はアクセスできないけど。
>>128
意味わからないです。どこからこういう話を聞いたのでしょうか。
var value = new Hoge( 10, 20 );
とした場合、Hoge のコンストラクタが実行され、オブジェクトが生成される。
そのオブジェクトへの"参照"が返され、value が初期化される。
んじゃなかった?
>>133
クラス型の言語と本質的に違うってまだわかってない?
function 文は、クラスの宣言じゃないんだから...
それと、>>133のコードは何をしようとしているのかわからないです。
var join = function(){...};
を
function join(){ return m_s1+m_s2; } ;
にしてみるとか...
「実行前にすべての変数がチェックされ」るのではなくて、実行前にすべての関数が
解釈されるのでこれ↑はできる。そういうことじゃないかな。
>>135
>>114のコードは prototype キーワードを使ってかけますよ。
0138137
NGNGあと、たくさん書き込んですみません。
0139137
NGNGprototype キーワード→ prototype プロパティ
0140113-114
NGNG>>137
>クラススコープなので(中略)使い物にならない
JavaScript のクラスは「関数内関数」が進化(?)したものだと思っているので、
一層上の関数の変数が見えるのは当然だろうと考えています。
しかも、クラススコープなら余計問題なく使えると思いますが…
…すいません、ちょっと頭が混乱してきたので、
出来ればなぜ使い物にならないのか詳しく説明してもらえるとありがたいです。
>意味わからないです。どこからこういう話を聞いたのでしょうか。
意味がわからないというのは、多分私の文章力の無さです(^^;
で、私がそう思った根拠ですが、MSDN の JScript のリファレンスに
以下のようなことが書いてあったからです。(以下 MSDN Lib の new 演算子の説明より抜粋)
・メンバを持たないオブジェクトを作成します。
・オブジェクトのコンストラクタを呼び出し、
新しく作成したオブジェクトへのポインタを this という名前でコンストラクタに渡します。
・コンストラクタは、受け取った引数に従って、オブジェクトを初期化します。
これを、自分なりに無い知恵絞って解釈した結果です。結構悩んだんですけど(^^;
何をどれに当てはめたらいいかで悩んだものですから。
0141140
NGNG>クラス型の言語と本質的に違うってまだわかってない?
分かってます。
function は、関数オブジェクトを作成するためのステートメントですよね。
これを使用すると全く新しいオブジェクトが出来るので、これを拡張して
クラスっぽくやろうというのが、JavaScript のオブジェクト指向だと解釈しています。
それでも私はクラス型と同じように記述したいわけです。
そのほうが見やすいし、分かりやすいと思いませんか?
あと、133 のコードは、こうするとエラーだということを示すためだけの意味のないコードです。
おっしゃるとおり、var join = function を function join にすれば、何の問題もありません。
っていうか、すべてのコードに意味なんてありませんけど(^^;
0142140
NGNG>>114 の継承の部分は、
this[key] = m_a.prototype[key]; (m_bも同じ)
でないとm_a[key]が toString や valueOf をもつ オブジェクトだった場合
期待通りの動きをしないかも。
あぁ、もう間違えだらけ。
混乱させてしまって申し訳ないです。
0144140
NGNG私の方法だと、スコープ外からのプロトタイプ継承が使えません。
あたりまえといえばあたりまえですが。
個人で完結したライブラリを作るときはあまり問題になりませんけど。
はっ!
ひょっとして、>>137 さんは、この問題を指摘していたのか!? (←気づくの遅すぎ。)
だらだらと書き込み重ねてすいません。そろそろやめます。
0145デフォルトの名無しさん
NGNGこんな感じですか?
function Man (n, a) {
//privateっぽい
var age = a;
//publicっぽい
this.name = n;
Man.prototype.setName = function (val) { this.name = val; };
Man.prototype.getName = function () { return this.name; };
Man.prototype.setAge = function (val) { age = val; };
Man.prototype.getAge = function () { return age; };
}
var mona = new Man("茂名","18");
var giko = new Man("擬古","19");
alert("mona の名前: " + mona.getName() );
alert("mona の歳: "+ mona.getAge() ); //上書きされてしまった
//(参考)すべてのメンバーを表示
var s="";
for (var i in mona)s+=i + " : " + mona[i] + "\n";
alert(s);
>>142
prototype と書かなくても大丈夫じゃないですか?
>>144
スコープ外からのプロトタイプ継承って?
継承するもののスコープは宣言された位置ですよ。
0146140
NGNG>prototype と書かなくても大丈夫じゃないですか?
そ、そのとおりです。っていうか書くとエラーが出ますね。(冷汗)
これからは、書き込むときはちゃんとコード書いて確かめてからにします。
すいません。
>スコープ外からのプロトタイプ継承って?
これは、私の書き方がまずかったです。
えーと、
function A(a)
{
this.clac1 = function(b){ return a+b; }
}
は、OKですけど、
A.prototype.calc2 = function(b){ return a*b; }
は a がどこにあるか分からないので、エラーになると。そういうことです。
0147デフォルトの名無しさん
NGNGだから、その関数の実行スコープは、実行時ではなくて、定義時だということです。
0149デフォルトの名無しさん
NGNGどうやるのかしってますか? 同じフレーム内ならぜんぜんOKなんだけど。
0150デフォルトの名無しさん
NGNGWeb制作板に行くべきだと思う。
+ JavaScript の質問用スレッド vol.10 +
http://pc.2ch.net/test/read.cgi/hp/1022077876/l50
0151デフォルトの名無しさん
NGNGどうもありがとうです。
0152デフォルトの名無しさん
NGNGfunction addMessageItem(arg){
arg.push( "今日も一日頑張ってください" );
}
function changeMessageArray(arg){
arg = new Array( "こんにちは", "ご機嫌いかがですか" );
}
という二つの関数があったとき、
objHello.msgArray = new Array( "おはようございます" );
var alias = objHello.msgArray;
addMessageItem(alias);
を実行すると、alias と objHello.msgArray の値は等しくなるのですが、
changeMessageArray(alias);
を実行しても、値に変化がありません。
Array は参照渡しなのに、どうしてこうなるのか全く分かりません。
なぜこうなるのかを教えてもらえないでしょうか?
0153デフォルトの名無しさん
NGNGチミは150を読んだのか?脊髄反射書込みするなよ。
0154デフォルトの名無しさん
NGNG0155デフォルトの名無しさん
NGNG0156デフォルトの名無しさん
NGNG参照渡しじゃないよ。値渡し。
alias が持っている Array への参照が arg にコピーされるだけ。
0157デフォルトの名無しさん
NGNGちゃんと参照渡しになっていますよ。
(arg == alias) // true
しかし、あなたのコードでは、参照という値を上書きしているだけです。
そのため、外部に何も影響を与えません。
参照で元の値を変更するならば、
arg.push(...) や arg.length = 0 などのようにしなければいけません。
0158デフォルトの名無しさん
NGNG結果的に参照が渡されるんだけどね。
0159デフォルトの名無しさん
NGNGありがとうございました。
changeMessageArray(alias);
or
changeMessageArray(objHello.msgArray);
と書いても、JavaScript だと objHello.msgArray は変わらないんですね。
Cとかやってると、このへんの仕様に悩まされます。
仕方が無いから、 changeMessageArray の最後に return arg; をつけて、
objHello.msgArray = changeMessageArray(objHello.msgArray);
alias = objHello.msgArray;
みたいな書き方をすることしました。
0160デフォルトの名無しさん
NGNGarg[0] = "こんにちは";arg[1] = "ご機嫌いかがですか";
とかどうよ?
0161デフォルトの名無しさん
NGNGあ、その方法でもいけますね。
そっちのほうが、スマートにまとまりそうなので、そちらを使用します。
ありがとうございました。
0162デフォルトの名無しさん
NGNG>>128
> var value = new Hoge( 10, 20 );
> value のローカル変数は、value 自体がスコープを抜けて
> クリアされるまで保持されるはず、と考えてるんだけど。
valueのローカル変数というのはHoge関数のローカル変数だと思いますが。
そのローカル変数はvalueのプロパティなのではなく
むしろvalueのメソッド(となっているインライン関数)に属しているのだと思います。
つまり、Hoge()内でメソッドがインライン関数として定義されているため、
Hoge実行時の状況(ローカル変数や引数)がHoge関数を抜けてからも
メソッドから見える状態になってるんだと思います。
>>136
厨房もじらーさんは関数スコープで考えていいと思います。
関数内関数の事を知れば解決すると思います。
「kia's website」 (J(ava)Scriptメモ -> JavaScriptでクロージャ)
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/5042/
0163デフォルトの名無しさん
NGNG>Cとかやってると、このへんの仕様に悩まされます。
void f(int* a)
{
a = new int[1];
a[0] = 9;
}
void main()
{
int int_array[] = {1, 2, 3, 4, 5};
f(int_array);
// 多分int_arrayはそのまま
}
Cでも同じじゃないでしょうか。
0164デフォルトの名無しさん
NGNG0165EL
NGNG関数の完全なクローンを作成します。
継承にも使えます。
var inheritance = function cloning_function( newfuncname, basefuncname )
{
var regexp = new RegExp( basefuncname );
var funcvalue = new String();
var exe = new String();
eval( exe.concat("funcvalue = ",basefuncname,".toString();") );
funcvalue = funcvalue.replace( regexp, "" );
eval( exe.concat(newfuncname," = ",funcvalue) );
exe = exe.concat( "for( var key in ", basefuncname, ".prototype )\n{\n" );
exe = exe.concat( "\t", newfuncname,".prototype[key] = " );
exe = exe.concat( basefuncname, ".prototype[key];\n", "}" );
eval( exe );
return newfuncname;
}
一応、JScript5.5 で動作確認しました。
0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNG笑 え な い 発 言 で す
0169167
NGNG0170167
NGNGこのスレむしされているなぁと。
0171デフォルトの名無しさん
NGNG0172デフォルトの名無しさん
NGNG0173デフォルトの名無しさん
NGNGおもっていいよね。JScriptってよくしらんし。
なるべく JavaScriptには近寄らないようにしようと生きてきたんだけど、
最近仕事で使うので仕方なく ECMA262と O'Reillyのやつを読んでみた。
読んでみるとなかなか面白い言語であるな。
closureがあったり scope chainがあったり prototypeだったり。
そのくせ constructorなんてあって Java (C++?) への未練が断ち切れて
なかったり。好事家としての言語屋の知識欲をそそる仕様みたいだ。
でもやっぱりこんなのでコード書きたくないけどなあ。
0174デフォルトの名無しさん
NGNG>Java (C++?) への未練が
まぁ、JavaScriptの歴史から調べてみては?
0175デフォルトの名無しさん
NGNG著者: Scott Duffy
出版予定: 2002年 12月
ttp://www.amazon.co.jp/exec/obidos/ASIN/1588803074/
JavaScript 2.0 と EMCAScript 4 についても書かれてるみたいですが、
12月までにEMCAScript 4が出るって事なのかな?
■ このスレッドは過去ログ倉庫に格納されています