我有以下代码:
var HD = function() { };
HD.Car = (function() {
var _date = "09/07/2010";
return {
Make: undefined,
Model: undefined,
showMakeAndModel: function() {
document.write(this.Make + " " +
this.Model +
" (data correct as of " + _date + ")");
}
};
})();
var bert = new HD.Car();
bert.Make = "Ford";
bert.Model = "Capri";
window.onload = bert.showMakeAndModel();
并收到以下错误:
HD.Car不是构造函数
我所要做的就是测试(学习)带有闭包的'单身模式'(对于私人成员)所以不是一个'真实'的例子,但是我正在读的书表明这是做的方法它
所以有点困惑 - 任何帮助都会非常感激.. 罗布
答案 0 :(得分:3)
HD.Car类定义周围有一些不正确的()()。这个固定的样本有效:
var HD = function() { };
HD.Car = function() {
var _date = "09/07/2010";
return {
Make: undefined,
Model: undefined,
showMakeAndModel: function() {
document.write(this.Make + " " +
this.Model +
" (data correct as of " + _date + ")");
}
};
};
var bert = new HD.Car();
bert.Make = "Ford";
bert.Model = "Capri";
window.onload = bert.showMakeAndModel();
答案 1 :(得分:1)
答案 2 :(得分:0)
删除 new
,因为只有构造函数才需要它。现在HD.Car将是对象,匿名和自动执行功能返回。然后在HD.Car之后移除parens。所以看起来应该是这样的:
var bert = HD.Car;
现在HD.Car是singleton
。
如果您希望它更像factory
,您应该这样做:
HD.Car = function() {
var _date = "09/07/2010";
return {
Make: undefined,
Model: undefined,
showMakeAndModel: function() {
document.write(this.Make + " " +
this.Model +
" (data correct as of " + _date + ")");
}
};
};
var bert = new HD.Car();
答案 3 :(得分:0)
在JavaScript中,您只能将新关键字与功能一起使用。
HD.Car
不是一个函数,它是一个对象。
请不要将new
用于您的示例。
答案 4 :(得分:0)
您的错误来自于您正在执行构造函数的事实,如HD.Car声明后(以及var bert之前)的开括号和近括号所示。因此,该函数正在执行并返回一个对象,然后您尝试使用“new”运算符。
如果删除这些括号,我相信您将获得所需的功能。