我用prototype:
创建了一个外部.js文件function Logger() {
var log = new Array("");
}
Logger.prototype.AddLine = function (value) {
if (value) {
Logger.log.push("\t" + value);
}
}
Logger.prototype.ReadLog = function () {
return this.log.join("");
}
现在我尝试在我的页面上使用它。我把我的文件包含在标题中。我有简单的js:
$(document).ready(function () {
var log = new Logger();
log.AddLine("User entered the page");
});
Firebug错误:
TypeError:Logger.log未定义
[打破此错误]
Logger.log.push(“\ t”+ value);
任何人都可以解释为什么会这样吗?
答案 0 :(得分:3)
您正在使用四个(!)不同的log
内容:
var log = new Logger();
是包含新Logger
实例var log = new Array("");
是一个(本地)变量,其范围限定为声明的构造函数。您将无法从外部访问它Logger.log.…
是Logger
功能对象上的属性。什么都没有,所以这一行会引发错误。this.log.…
是你真正想要的,是当前实例上的一个属性。所以将脚本更改为:
function Logger() {
this.log = [""]; // not sure why not just an empty array
}
Logger.prototype.AddLine = function (value) {
if (value) {
this.log.push("\t" + value);
}
};
Logger.prototype.readLog = function () {
return this.log.join("");
};
答案 1 :(得分:2)
要将log
实例上的Logger
设置为空数组,请使用this.log = []
,而不是var log
。后者创建一个私有变量,您无法在函数外部访问它。
此外,Logger.log
表示:访问log
函数上的Logger
属性。在这里,您需要实例,因此请使用this.log
(就像您在ReadLog
中所做的那样)。