Javascript では、すべてがオブジェクト、文字列、配列、変数、関数もオブジェクトであるため、 ['a','b','c'].push('d') が許可されます。このような操作が存在します。クラス自体もオブジェクトであり、プロパティとメソッドを定義することもできます:
function Test(){};
Test.str = 'str';
Test.fun = function(){return 'fun';}; = Test.str; // str
var r2 = Test.fun(); // 楽しい
var inst ();
var r3 = inst.str;
var r4 = inst.fun(); // unknownprototype はクラスに作用するプロパティです。デフォルトでは、すべての 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()
{ this.test1 = 'pt1' }; = 'pt2 ' };
pt2.prototype.test3 = 'test4';
pt1.prototype = 新しい pt2(); >テスト.プロトタイプ = new pt1();
var p1 = inst.test; // 未定義
var p2 = inst.test1; test4 の代わりに
var p3 = inst.test2; // pt2
var p4 = inst.test3; // test3 代入は値を取得するよりもはるかに簡単です。
プロトタイプの属性値をレイヤーごとに検索するのではなく、現在のインスタンスに値を直接割り当て、存在しない場合は作成します。
組み込みクラスの拡張
組み込みクラスのプロトタイプは Javascript で直接変更できません。ただし、プロトタイプの属性を変更することで、組み込みクラスの動作を変更できます。
コードをコピーします
コードは次のとおりです。
Array.prototype = {push:function( ){alert ('test1');}}; // 動作しません
for(var i=0; i
{
this[ pos] = 引数[i ];
return this.length;
var test = new Array('a','b','c'); ('d' ,'e');
for ステートメントを使用して属性を出力する場合、組み込みクラスのプロトタイプに追加された関数も表示されることに注意してください。 🎜>
コードをコピーします
コードは次のとおりです。
var
for(var iテスト中) {
str = (' ' i); // '0 1 2 3 4 5 Pushes' はカスタム関数をプッシュします。
} コードをコピー
コードは次のとおりです:
var str;
for(var i in test)
{
if(test.hasOwnProperty(i)) // プッシュ関数を除外します。 。
{ str = (' ' i); }
コードをコピー
コードは次のとおりです:
関数 Test(){}
Test.prototype.num = 3;
var inst1 = new Test();
var inst2 = new Test(); >
Test.prototype.num = 4; // すべての値は Test.prototype.num を指します。
var p1 = inst1.num; // 4
var p2 = inst2.num; // 4
inst1.num = 5; // 代入により inst オブジェクトの num 属性が作成されます。 。
Test.prototype.num = 6; // すべての値は Test.prototype.num を指します。
var p3 = inst1.num; // 5 ここで返されるのは、Test.prototype.num の値ではなく、作成されたばかりの inst1.num の値です。
var p4 = inst2.num; // 6
delete Test.prototype.num;
var p5 = inst1.num; // 5 inst1.num;
var p6 = inst2.num; // 未定義の Test.prototype.num が削除されました。