JS類定義の原型方法の2つの実現の違いについてのコメントが多いです。
4670 ワード
JavaScript類に原形を付ける方法は簡単であることを知っています。また、よく使われているのは次の2つの方法ですが、この2つの方法には違いがありますか? JScript クラス:
function JSClass()
{
}
Extens プロトタイプ method:
JSClass.prototype.MethodA = function()
{
};
Or
function = JSClass.prototype.MethodA()
{
};
菵 re: JS類定義モデル方法の2つの実現の違い 返信 コメント まず簡単な違いを言います。この2つの方法が導入したプロトタイプの方法は、最初は匿名の方法です。第二の方法は方法名「JSClass.prototype.MethodA」があります。 2005-03-01 10:52 | バードショット # re: JS類定義モデル方法の2つの実現の違い 返信 コメント <スクリプト> 機能 JSClass() { } 機能 = JSClass.prototype.MethodA() { }; ヒントが間違っています。 2005-03-01 13:51 | チェット # re: JS類定義モデル方法の2つの実現の違い 返信 コメント faint,Free TextBoxが少量のデータ(1文字か2文字)を修正して提出すると効果がない場合があります。 それは手を間違えて「=」と書きましたが、修正したのを覚えています。 2005-03-01 14:00 | バードショット # re: JS類定義モデル方法の2つの実現の違い 返信 コメント 実はこの二つの原形の定義方式は簡単に説明できます。まずそれらを二つの関数として見て、次のようにします。 Foo 1() 機能 Foo 1() { alert('This is Foo 1.') } 和 Foo 2() var Foo 2 = function() { alert('This is Foo 2.') } 最初の操作は間違いがないはずですが、二つ目の運行に問題があります。この時システムは「Microsoft」と言います。 JScript runtime error: Object expectedすなわち関数定義(Foo 1)は、シナリオ解析器の中で最も高い初期化優先度を持っています。これはよく分かります。処理関数を優先しないと、関数の関数呼び出しに対して処理ができなくなります。fn 1()を先に決めてfn 2()を定義しても、fn 1からfn 2を調整すれば、解決できなくなります。なぜFoo 2が初期化できないのか、Foo 2の定義は関数定義ではなく、標準的な割当文であり、標準関数のようにFoo 2(Foo 2()が使えるのかは、関数オブジェクトの実例を指すからです。2005-03-03 22:17 | バードショット # re: JS類定義モデル方法の2つの実現の違い 返信 コメント また、原形法導入の2つの方法を見れば、簡単です。また、異なる優先順位を実行しても、それらの使用における違いを決定しています。以下の例を参照してください。 laguage=「javascript」function NormalClass() { this.m_Propty 1 = 'P 1 in Normal クラス this.m_Propty 2 = 'P 2 in Normal クラス this.toString = function() { return '[クラス NormalClass'; } return new Inneraclass() 機能 インナークラス() { this.m_Propty 1 = 'P 1 in Inner クラス this.m_Propty 2 = 'P 2 in Inner クラス this.toString = function() { return '[クラス インナークラス } } Inneraclass.prototype.Method 1 = function() { alert(this.m_Property 1) }; 機能 Inneraclass.prototype.Method 2() { alert(this.m_Property 2) }; } 実行: var nc = new NormalClass(); nc.Method 1() nc.Method 2() 何の効果ですか?なぜですか? 2005-03-03 22:21 | バードショット # re: JS類定義モデル方法の2つの実現の違い 返信 コメント 結局、nc.Method 1()が定義されておらず、nc.Method 2()が正常に動作します。実はおかしくないです。Inneraclass.prototype.Method 1 = function()は、割り当てられた語句の実行に依存し、 機能 Inneraclass.prototype.Method 2() スクリプトエンジンによって最高優先で初期化されます。 2005-03-05 02:43 | バードショット # re: JS類定義モデル方法の2つの実現の違い 返信 コメント 私はAntechinaにいます JavaScript Editorはあなたのコードをテストします。 機能 Inneraclass.prototype.Method 2()エラーを報告しました。 SyntaxErrror:missing before formal parameters See: .prototype.Method 2( 2005-05-10 17:11 | エロエロ # re: JS類定義モデル方法の2つの実現の違い 返信 コメント @エロエロ IEで試したことがありますか? 2005-05-10 17:30 | バードショット # re: JS類定義モデル方法の2つの実現の違い 返信 コメント FFを使っても同じエラーです。 missing before formal parameters See: .prototype.Method 2( 2006-08-19 22:40 | jzz # re: JS類定義モデル方法の2つの実現の違い 返信 コメント return new Inneraclass() この行を移してください 機能 Inneraclass.prototype.Method 2() { alert(this.m_Property 2) }; 後のieは正常を実行します。FFはエラーを報告します。 missing before formal parameters See: .prototype.Method 2( ieはアンオーダーで実行されていますが、NSシリーズは違います。 FFはfunctionに実行しています。 Inneraclass.prototype.Method 2() この時はこのInneraclass類があることを全然知らなかったので、当然理由もなくprototype.xxxの東に来てはいけません。 2006-11-13 00:57 | Dutu # re: JS類定義モデル方法の2つの実現の違い 返信 コメント @Dutu returnを返す new Inneraclass()functionにセットする Inneraclass.prototype.Method 2()この方法はその後、私がこの例を作る目的に完全に違反しました。この例はちょうど、IE対functionを説明しています。 foo()という関数は、フォーマットを定義するとより高い解析優先度がありますが、fooは = function()は普通の割当語句です。ffの状況については研究したことがありません。あなたがffがreturn後のInneraclassが見つからないと言った以上、手順の解析functionだと説明します。 これはまだ定義されたフォーマットです。 2006-11-13 01:29 | バードショット # re: JS類定義モデル方法の2つの実現の違い 返信 コメント えっと、かわいそうにieしか使えない人ですね。 機能 x.y.z() {} の書き方は根本的に標準的ではない書き方です。ieだけがサポートしています。他のjsエンジンの中では、ffやoperaなどが間違っています。標準に合う書き方は x.y.z = 機能 () {}; もちろん、文法的にはこのような書き方が好きです。これからの標準でこのような書き方を採用したいです。 2006-11-28 11:04 | hax # re: JS類定義モデル方法の2つの実現の違い 返信 コメント へへ はい、そうです。 ieだけが母親のように子供の様々な過ちを受け入れます。 標準的な書き方は x.y.z = 機能 () {}; 実は、ieはもっと怪しい書き方をサポートしています。 これを見てください 機能 window::onload(){ alert(「go_」rush') } 2006-11-28 14:39 | ゴウRush # re: JS類定義モデル方法の2つの実現の違い 返信 コメント @hax 標準は更に良くて、人となりのサービスので、これが学院派と工事派の間の事なことを論争して、私達は私達の自分の系統をよく実現してすみます。 // あなたのコメントはとてもいいです。Sigh、残念ながらIEのせいで、かわいそうです。