2017-06-16 68 views
0

我需要了解Array對象如何獲取對Object的引用。javascript原型繼承如何爲陣列工作,函數

例如,當我創建var arr = [];時,它有Array.prototype --->Object.prototype --->null

我想以上,以實現下面的例子:

假設我有一個功能xyz(),其中xyz.prototype.somefunction = function() { }

我有另一個功能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

請使用反引號來正確格式化代碼。 – 2017-06-16 16:47:56

+0

你想達到什麼目的?或者這是一種學術學習練習? – 2017-06-16 16:49:05

回答

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

太好了。這是我正在尋找.. :) –