我试图让我的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");
Uncaught TypeError: Object function QuickDOM()
任何人都可以向我提出任何有关为什么不起作用的建议。
注意:我使用this作为指南。
答案 0 :(得分:1)
您正在添加实例方法,然后尝试在代码中静态访问它们。
尝试将QuickDOM.createElement("a")
替换为this.createElement("a")
。
此外,您分配实例方法的方式通常被认为是不好的做法。我可以看到一些优点,如果你这样做是为了拥有私有变量,但看到你不是,你可能想让这些方法存在于原型上。
答案 1 :(得分:1)
要使用createElement
或A
,您必须创建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");