まず、シンプルなコンストラクター+プロトタイプオブジェクトのミニプログラムを持ちましょう
function createobj(uname、uage){this.username = uname = uage;} createobj.prototype.showusername()is.username;} createobj.prototype.showuserage = function(){これを返します。 }このプログラムでは、各メソッドが拡張されています:
createobj.prototype = {showuserage:function(){return this.userage;}、function(){return this.usoname; ); console.log(obj1.showusername()、obj1.showuseuserage());ただし、このプロトタイプオブジェクトの執筆は、createOBJのデフォルトのプロトタイプオブジェクトに属します。
書き換える前に、コンストラクターはcreateOBJを指します
function createobj(uname、uage){this.username = uname = uage;} createobj.prototype.showusername()is.username;} createobj.prototype.showuserage = function(){これを返します。 } console.log(createobj.prototype.constructor === createobj);書き換えた後、建設業者はオブジェクトを指します
createobj.prototype = {showuserage:function(){return this.userage;}、function(){return this.prototype.constructor === createobj) .constructor ===オブジェクト);したがって、建設業者はオブジェクトを正確に識別することはできません。
以前に書いた手順は、基本的にプロトタイプオブジェクト(プロトタイプ)に拡張され、次にオブジェクトをインスタンス化してから、オブジェクトを制度化し、次にプロトタイプ上の関数を拡張します。
インスタンスオブジェクトは通常、拡張機能を呼び出すことができますか?
function createobj(uname、uage){this.username = uname;} var obj1 = new createobj( 'ghostwu'、22); } console.log(obj1.showusername());それは正常に呼ばれることができますが、プロトタイプオブジェクトが書き換えられた場合、それは呼び出されません
function createobj(uname、uage){this.username = uname;} var obj1 = new createobj( 'ghostwu'、22); ;}} console.log(obj1.showusername()プロトタイプオブジェクトを書き換えた後、書き換え前にインスタンス化されているため、インスタンスの暗黙のプロトタイプはプロトタイプオブジェクトの書き換えを指し示していないため、プロトタイプにいる場合は、プロトタイプ、オブジェクトに引用型(プロトタイプ)があり、注意してください。複数のインスタンスがプロトタイプオブジェクトを共有するため、参照型の値を変更するインスタンスがある限り、他のすべてのインスタンスが結果を受信します。変化。
function createobj(){} createobj.prototype = {ghostwu '、skills:[' php '、' javascript '、' linux ']}; Python ');プロトタイプの共有機能は、繰り返す配列など、いくつかの構築されたオブジェクトのいくつかの方法を拡張するのに便利です
array.prototype.unique = function(){var res = []; = -1){res.push(this [i]);}} reture res;} var anrr = [10、20、30、20、40、20]; ; // 10、30、40ただし、構築されたオブジェクトのメソッドをさりげなく拡張しないでください。
上記は、この記事のすべての内容です。