これは比較的特殊な属性であり、JavaScript の継承は通常この属性に依存します。
JavaScript では、すべてがオブジェクト、文字列、配列、変数、関数もオブジェクトであるため、['a','b','c'].push(' d') ;そのような操作は存在します。クラス自体もオブジェクトであり、プロパティとメソッドを定義することもできます:
function Test(){};
Test.str = 'str';
Test.fun = function(){return 'fun';};
var r1 = テスト。 str; // str
var r2 = Test.fun(); // 楽しい
var inst = new Test(); // 未定義
var r4 = inst.fun() ; // 未定義
プロトタイプはクラスに作用する属性です。デフォルトでは、すべての JavaScript クラスにはプロトタイプ属性がありますが、クラス インスタンスにはありません。
function Test(){}; >var p1 = typeof(String.prototype); // オブジェクト
var p2 = typeof(Test.prototype); // オブジェクト
var p3 = typeof(new Test().prototype); 🎜>var p4 = typeof(Object.prototype); // オブジェクト
var p5 = typeof(new Object().prototype); // 未定義
値と代入
Javascript は、オブジェクトに存在しない属性またはメソッドを取得すると、そのオブジェクトに対応するクラスのプロトタイプ属性にその属性またはメソッドが含まれているかどうかを調べます。また、そのプロトタイプも Javascript オブジェクトであるかどうかを確認します。いいえ、プロトタイプは、対応するクラスのプロトタイプにアクセスし、必要な属性またはメソッドが見つかるまで、またはプロトタイプ属性が null になるまで、レベルごとにアクセスします。
コードをコピーします
コードは次のとおりです。 function Test(){}; >テスト。テスト = 'str';
関数 pt1 = 'pt1' }; ;
pt2.prototype.test3 = 'test3';
pt2.prototype = new pt2(); ;
var inst = new Test();
var p1 = inst.test1; // test4 の代わりに pt1; ; // pt2
var p4 = inst.test3; // test3
代入は値を取得するよりもはるかに簡単です。プロトタイプ内の属性値をレイヤーごとに検索するのではなく、現在のインスタンスに値を直接割り当て、存在しない場合は作成します。
組み込みクラスの拡張
組み込みクラスのプロトタイプは、JavaScript で直接変更できません。ただし、プロトタイプの属性を変更することで、組み込みクラスの動作を変更できます。
コードをコピーします
コードは次のとおりです。
Array.prototype = {push:function( ){alert ('test1');}}; // 動作しません
Array.prototype.push = function(){alert('test2');}; // できます
コードをコピー
コードは次のとおりです。
Array.prototype.pushs = function( )
{
var pos = this.length;
for(var i=0; i{ this[ pos] = argument[i]; } return this.length; }
var test = new Array('a','b','c');
test.pushs('d',' e');
for ステートメントを使用して属性を出力する場合、組み込みクラスのプロトタイプに追加された関数も表示されることに注意してください:
コードをコピーします
コードは次のとおりです。
var str; for(var i in test)
{
コードをコピー
コードは次のとおりです:
var str;
for(var i in test)
{