ホームページ  >  記事  >  ウェブフロントエンド  >  javascript_javascriptスキルのprototype属性の分析例と説明

javascript_javascriptスキルのprototype属性の分析例と説明

WBOY
WBOYオリジナル
2016-05-16 18:21:50872ブラウズ

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');}}; // 動作しません
Array.prototype.push = function(){alert('test2');}; // できます var test = new Array ('a ','b','c'); test.push('d'); // 一度に複数の要素を挿入できる test2 の Array.push 関数: Array。プロトタイプ.pushs = function() { var pos = this.length;
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 が削除されました。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。