我需要擴展一個字符串編寫器函數,它包含標題和正文。在整個「字符串」被渲染之前,主體可以有多個附加行。然後引用一個新對象。我的問題在於,當我調用原型的子函數時,主體無法訪問整體功能。我必須錯過一些簡單的想法。由於原型函數中的Javascript子函數
https://jsfiddle.net/hitman1733/n2od4s6s/
var StringBuilder = function() {
this.Heading;
this.Body;
}
StringBuilder.prototype.Heading = function(text){
this.Heading = text + '\n';
}
StringBuilder.prototype.Item = function()
{
this.add = function(field, text) {
this.Body = ' ' + field +': ' + text + '\n';
}
}
StringBuilder.prototype.Append = function() {
return this.Heading + '\n' + this.Body;
}
var Primary = new StringBuilder();
Primary.Heading = 'My Heading';
var privalue = new Primary.Item();
privalue.add('bob', 'smith');
privalue.add('sally', 'smith');
console.log(Primary.Append());
上下文問題。 'add'中的'this'是指'Item'構造函數的新上下文。要用'Primary'上下文調用add,你必須使用'call'或'bind'或'apply'來設置外部上下文。例如:'privalue.add.call(Primary,'bob','smith');' –