2017-06-16 3 views
0

ArrayオブジェクトがObjectへの参照を取得する方法を理解する必要があります。例えば配列のjavascriptプロトタイプ継承がどのように機能するか

、私はvar arr = [];を作成するとき、それは--->Object.prototype --->nullArray.prototypeを持っています。

私は以下の例については、上記達成したい:

は私がxyz.prototype.somefunction = function() { }機能xyz()を、持っていると仮定します。

私は別の機能を持っていますabc()、ここではabc.prototype.anotherfunction = function() { }です。

私はabc()のオブジェクトを作成 - var obj = new abc()のように - 私はそれがobj --->abc.prototype --->xyz.prototype --->object.prototype --->nullのようなプロトタイプチェーンを持っていると思います。

これを行う最善の方法をお勧めします。

+1

'Object.setPrototypeOf(abc.prototype、xyz.prototype); ' – 4castle

+0

コードを正しくフォーマットするためにバッククォートを使用してください。 –

+0

あなたは何を達成しようとしていますか?あるいは、これはある種の学問的学習の練習ですか? –

答えて

0

あなたはプロトタイプの継承を行うことができます:あなたは、新しいオブジェクトを作成するときに

abc.prototype = new xyz();

、それはあなたが望むチェーンに従います。

1
function xyz() {} 
function abc() {} 
var p = new xyz(); 
abc.prototype = p; 

var o = new abc(); 
o.__proto__ === p // true 
o.__proto__.__proto__ === xyz.prototype // true 
o.__proto__.__proto__.__proto__ === Object.prototype // true 
o.__proto__.__proto__.__proto__.__proto__ === null // true 

または:

function xyz() {} 
function abc() {} 
var p = Object.create(xyz.prototype); 
abc.prototype = p;  

var o = new abc(); 
o.__proto__ === p // true 
o.__proto__.__proto__ === xyz.prototype // true 
o.__proto__.__proto__.__proto__ === Object.prototype // true 
o.__proto__.__proto__.__proto__.__proto__ === null // true 

または:

class xyz {} 
class abc extends xyz {} 

var o = new abc(); 
o.__proto__.__proto__ === xyz.prototype // true 
o.__proto__.__proto__.__proto__ === Object.prototype // true 
o.__proto__.__proto__.__proto__.__proto__ === null // true 

または:

function xyz() {} 
const abc = { 
    __proto__: Object.create(xyz.prototype) 
} 

abc.__proto__.__proto__ === xyz.prototype // true 
abc.__proto__.__proto__.__proto__ === Object.prototype // true 
abc.__proto__.__proto__.__proto__.__proto__ === null // true 

または:

function xyz() {} 
function abc() {} 
Object.setPrototypeOf(abc.prototype, xyz.prototype); 

var o = new abc(); 
o.__proto__.__proto__ === xyz.prototype // true 
o.__proto__.__proto__.__proto__ === Object.prototype // true 
o.__proto__.__proto__.__proto__.__proto__ === null // true 
+0

'const abc = {'は他の関数と同じように宣言していません。 – 4castle

+0

素晴らしい。これは私が探していたものです:) –

関連する問題