面向对象的JavaScript帮助

时间:2010-07-09 15:05:55

标签: javascript singleton oop closures

我有以下代码:

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不是构造函数

我所要做的就是测试(学习)带有闭包的'单身模式'(对于私人成员)所以不是一个'真实'的例子,但是我正在读的书表明这是做的方法它

所以有点困惑 - 任何帮助都会非常感激.. 罗布

5 个答案:

答案 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)

了解更多信息:

How to write a singleton class in javascript

希望这会为你带来更多的光芒!

答案 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”运算符。

如果删除这些括号,我相信您将获得所需的功能。