2016-09-29 60 views
0

我運行在Node.js的以下內容:的Javascript:的Object.create(原型)不工作

function TextCell(text) { 
    this.text = text.split("\n"); 
} 

TextCell.prototype.minWidth = function() { 
    return this.text.reduce(function(width, line) { 
     return Math.max(width, line.length); 
    }, 0); 
}; 

TextCell.prototype.minHeight = function() { 
    return this.text.length; 
}; 

TextCell.prototype.draw = function(width, height) { 
    var result = []; 
    for (var i = 0; i < height; i++) { 
     var line = this.text[i] || ""; 
     result.push(line + repeat(" ", width - line.length)); 
    } 
    return result; 
}; 

function RTextCell(text) { 
    TextCell.call(this, text); 
} 

RTextCell.prototype = Object.create(TextCell.prototype); 

RTextCell.prototype.draw = function(width, height) { 
    var result = []; 
    for (var i = 0; i < height; i++) { 
     var line = this.text[i] || ""; 
     result.push(repeat(" ", width - line.length) + line); 
    } 
    return result; 
}; 

當我CONSOLE.LOG(RTextCell.prototype),我得到的原型只有平局功能。此外,當我登錄(Object.create(Textcell.prototype))我只是得到「TextCell {}」。爲什麼看起來原型的克隆是空的?

編輯:我注意到我的錯誤。在定義它之前,我創建了RTextCell類型的對象。這就是爲什麼原型變空了。對不起,這裏不包括那部分

+0

[您的代碼似乎對我很好。](https://jsfiddle.net/1oypy93n/)請記住,您正在創建一個新的對象,其原型是您通過它的參數。如果您在Chrome中查看它,請檢查'__proto__'屬性以查看基礎原型。 –

+0

我在node.js中運行它。嘗試使用依賴於具有相同函數定義的兩個類的函數時,會出錯 – miracleJester

回答

1

爲什麼看起來原型的克隆是空的?

因爲它沒有自己的屬性。繼承的屬性不直接顯示在控制檯中,但當展開對象時,可以按照原型鏈。