在Javascript中模仿类

时间:2014-03-17 22:46:40

标签: javascript class

我试图让我的Javascript生活更轻松一点(至少对我的工作环境而言)。我试图将我的所有Javascript对象创建方法移动到"类"。我有以下代码(创建超链接):

function QuickDOM()
{
   this.createElement = function(tag)
   {
       var element;
       if (tag === undefined || typeof tag != 'string')
       {
           element = document.createElement("div");
       }
       else
       {
           element = document.createElement(tag);
       }
       return element;
    };

    this.A = function(hyperlink, content)
    {
       var element = QuickDOM.createElement("a");
       element.setAttribute("href", hyperlink);
       element.innerHTML = content;
       return element;
    };
}

这是模仿一个"类"的正确方法吗?在Javascript?我目前在执行new QuickDOM().A("www.google.com", "Google");

时在Chrome中遇到以下错误
Uncaught TypeError: Object function QuickDOM()

任何人都可以向我提出任何有关为什么不起作用的建议。

注意:我使用this作为指南。

3 个答案:

答案 0 :(得分:1)

您正在添加实例方法,然后尝试在代码中静态访问它们。

尝试将QuickDOM.createElement("a")替换为this.createElement("a")

此外,您分配实例方法的方式通常被认为是不好的做法。我可以看到一些优点,如果你这样做是为了拥有私有变量,但看到你不是,你可能想让这些方法存在于原型上。

答案 1 :(得分:1)

要使用createElementA,您必须创建QuickDOM的实例:

var quickDOM = new QuickDOM();
var element = quickDOM.createElement("a");

A方法中,您应该使用this代替QuickDOM

var element = this.createElement("a");

答案 2 :(得分:1)

A方法中,您使用的是函数而不是对象的实例。这段代码:

var element = QuickDOM.createElement("a");

将使用您所在的实例:

var element = this.createElement("a");

但是,由于您没有使用该对象的多个实例,您应该只创建一个对象而不是具有构造函数:

var QuickDOM = {
   createElement: function(tag)
   {
       var element;
       if (tag === undefined || typeof tag != 'string')
       {
           element = document.createElement("div");
       }
       else
       {
           element = document.createElement(tag);
       }
       return element;
    },

    A: function(hyperlink, content)
    {
       var element = this.createElement("a");
       element.setAttribute("href", hyperlink);
       element.innerHTML = content;
       return element;
    }
}

现在您只需使用该对象来调用方法:

var link = QuickDOM.A("www.google.com", "Google");