js中のプロトタイプ


全文の転載は以下の通りですhttp://blog.csdn.net/junkaih2008/article/details/2653142
知っています
JScript
オブジェクトに合わせる
プロトタイプ
属性は、オブジェクトタイプの原型の参照を返すために使用されます.私達は使います
プロトタイプ
属性は、オブジェクトのクラスの基本機能のセットを提供します.また、オブジェクトの新しい例会

引き継ぐ

このオブジェクトに原型を付ける操作.でもこれは
プロトタイプ
一体どうやって実現し管理されていますか?
対象に対する
プロトタイプ
属性の説明、
JScript
マニュアルに書いてあります.
JScript
内部のオブジェクトには読み取り専用のものがあります.
プロトタイプ
を選択します.そのプロトタイプに動的に機能を追加できます.
(
属性と方法
)
ただし、このオブジェクトは異なる原型を与えられません.しかし、ユーザが定義したオブジェクトは、新しいプロトタイプに割り当てられてもよい.
次に私達は三つの経典のを見ます.
プロトタイプ
属性の使用例.
1
、スクリプト環境内にオブジェクトを追加する方法:
プログラムコード
Array.prototype.max = function()
{
var i, max = this[0];
for (i = 1; i < this.length; i++)
{
if (max < this[i])
max = this[i];
}
return max;
};
 
2
を選択します.
プログラムコード
function TestObject(name)
{
this.m_Name = name;
}

TestObject.prototype.ShowName = function()
{
alert(this.m_Name);
}; 
 
3
、カスタムクラスの更新
プロトタイプ
:
プログラムコード
function TestObjectA()
{
this.MethodA = function()
{
alert(&apos;TestObjectA.MethodA()&apos;);
}
}

function TestObjectB()
{
this.MethodB = function()
{
alert(&apos;TestObjectB.MethodB()&apos;);
}
}

TestObjectB.prototype = new TestObjectA(); 
 
三つ目はよく知っていますよね?そうです.これは前に紹介した原型相続法です.
~
でも、今日は研究ではありません.

引き継ぐ

このようにして相続を実現できるのは、ただ利用するだけです.
プロトタイプ
属性の副作用だけです.
プロトタイプ
もう一つのデフォルトの属性があります.
トラック
は、オブジェクトを作成する関数です.
(
つまり私たちです
OOP
というコンストラクタ
)
.
トラック
属性はすべて持っています.
プロトタイプ
属性のオブジェクトのメンバーです.それらは除算を含みます
Global

Math
対象外のすべて
JScript
内部オブジェクト
トラック
属性は、特定のオブジェクトのインスタンスを作成する関数への参照を保存します.
はっきりさせました
JScript
にある
プロトタイプ
属性はどう使いますか?次に深く研究します.
上の文章の中に並べてみました.
プロトタイプ
属性は
JScript
のいろいろな使い方があります.
プロトタイプ
これは間違っています.
JScript
創造されたもの
JScript
実は私達のデザインモードを使っています.
prototype pattern
の一種の派生形式.まず簡単に話します.
prototype pattern
そして最後まで見に来ます.
JScript
的に命中する
プロトタイプ
どういうことですか
?! What&apps;s prototype pattern?Specify the kids of object s to create using a prototypical instance,and create new object s by copying this prototype.
作成対象の種類をプロトタイプ例で指定し、これらのプロトタイプをコピーすることによって新たなオブジェクトを作成します.
プロトタイプモードでは、もう一つのオブジェクトをカスタマイズ可能なオブジェクトを作成することができます.どのように作成されたかを知る必要はありません.プロトタイプのオブジェクトをその作成対象に渡すことで、これを作成する対象はプロトタイプのコピーを要求することによって作成されます.
いったい何なのか分かり続けます.
prototype pattern
を選択します
&appos;
デザインモードの
Prottype(
原型
)&apps;
この文章はわからなくても
Java
大丈夫です.コードを全部使ってください.
同前
見ればいいです
原型は何ですか?とにかく覚えています.
prototype pattern
はい、実現は依存です.
clone
この操作はもちろんです.
show copy
まだです
deep copy

clone
自分の必要に応じて.
続いて話します.
JScript
の中の
プロトタイプ
なぜ私たちはそれを話しますか?
prototype pattern
の中の
プロトタイプ
違いますね
?!
これは私が言ったのではなく、私が吹いたのでもありません.この例を見てください.
プログラムコード
<script language="javascript">
function RP()
{
RP.PropertyA = 1;
RP.MethodA = function()
{
alert("RP.MethodA ");
};

this.PropertyA = 100;
this.MethodA = function()
{
alert("this.MethodA");
};
}

RP.prototype.PropertyA = 10;
RP.prototype.MethodA = function()
{
alert("RP.prototype.MethodA");
};
</script> 
 
焦らないでください.まだサンプルを作っていません.私たちが見せてくれるクラスだけです.
RP
何ですか
rpwt
ですか?もちろん違います
RP
はい、
Reserch Prototype
もういいです.いいです.例と結果を見て分析します.
プログラムコード
<script language="javascript">
rp = new RP();
alert(RP.PropertyA);
RP.MethodA();
alert(rp.PropertyA);
rp.MethodA();
</script> 
 
運転結果がキラキラと登場:
1 RP.MethodA 100 this.MethodA
これ
@@@@@@@@@@&^…
焦らずに見てください.
プログラムコード
<script language="javascript">
rp = new RP();
delete RP.PropertyA;
alert(RP.PropertyA);
delete RP.MethodA;
RP.MethodA();
delete rp.PropertyA;
alert(rp.PropertyA);
delete rp.MethodA;
rp.MethodA();
</script> 
 
運転結果再登場:
プログラムコード
undefined A Runtime Error has occurred.Do you wish to Debug?Line:32 Error:Object doesn&apps;t support this property or method 10 RP.prototype.MethodA
面白いでしょう.何かいいところがありますか?ここの
RP.ProptyA

RP.MethodA
参考にするだけですが、どうすればいいですか?
this.PropertyA

this.MethodA
すべて
delete
まだ結果が出ます.
プロトタイプ
導入する属性と方法は?
これです
JScript

プロトタイプ

prototype pattern
にある
プロトタイプ
最大の違いです.
JScript
の中のこれはいわゆる
プロトタイプ
属性は言語自体がサポートしている特性です.ここでは何も発生していません.
copy
にかかわらず
sharow
まだです
deep
はい、そうです.に対する
JScript
エンジンの解釈は、処理されています.
「.」
または
「[keyName]」
参照するオブジェクトの属性と方法は、まずオブジェクト自体のインスタンスにあります.
(this)
で検索します.見つけたら戻ります.または実行します.もし見つけられなかったら、オブジェクトの
prototype(this.com nstructor.prototype)
で検索対象と方法が定義されていますか?見つけたら戻りますか?実行します.見つけられなかったら戻ります.
undefined(
属性について
)
または
runtime error(
方法について
)
.
からこそ
プロトタイプ
クラスのインスタンスをインポートする属性または方法は動的に検索されるので、システム内のオブジェクトに追加できます.
プロトタイプ
属性と方法、例えば
String
オブジェクトの追加
trim
方法:
プログラムコード
<script lanuage="javascript">
String.prototype.trim()
{
return this.replace(/(^/s+)|(/s+$)/g, "");
}
</scritp> 
 
明らかである
JScript
この用法も
prototype pattern
的に命中する
プロトタイプ
説明とサポートができません.
これは正しいです
JScript OOP
中原型継承法の理解には何の障害もないだろう.同時に、なぜ原型継承法がそんなに大きな欠陥を持っているのかが分かりますよね?もちろん何か問題がありましたら、引き続き検討してください.
サンプルソースコードを添付します.
プログラムコード
<html>
<head>
<meta name="author" content="birdshome@   ">
<title>JScript Prototype Research</title>
</head>
<body>
<script language="javascript">
function RP()
{
RP.PropertyA = 1;
RP.MethodA = function()
{
alert("RP.MethodA ");
};

this.PropertyA = 100;
this.MethodA = function()
{
alert("this.MethodA");
};
}

RP.prototype.PropertyA = 10;
RP.prototype.MethodA = function()
{
alert("RP.prototype.MethodA");
};
</script>
<script language="javascript">
rp = new RP();
delete RP.PropertyA;
alert(RP.PropertyA);
delete RP.MethodA;
RP.MethodA();
delete rp.PropertyA;
alert(rp.PropertyA);
delete rp.MethodA;
rp.MethodA();
</script>
</body>
</html>