OOP JavaScript – 创建自定义Div对象
我刚刚开始使用JavaScript中的OOP。 我想创建一个自定义的“面板”。 这是我到目前为止:
function ShinyPanel(css, attributes) { this.container = $(document.createElement("div")).addClass("shinyPanel"); this.titleBar = $(document.createElement("div")).addClass("shinyPanelTitleBar").appendTo(this.container); this.topShine = $(document.createElement("div")).addClass("shinyPanelTopShine").appendTo(this.container); this.leftShine = $(document.createElement("div")).addClass("shinyPanelLeftShine").appendTo(this.container); this.content = $(document.createElement("div")).addClass("shinyPanelContent").appendTo(this.container); if (!css) css = {}; if (!attributes) attributes = {}; this.css = css; $(this.container).css(this.css); this.title = attributes["title"]; $(this.titleBar).html(this.title); }
现在我可以实例化这个对象,并通过以下方式将其附加到正文:
var panel = new ShinyPanel({position:"absolute", top:"25%", width:"300px", height:"200px"}, {title:"Test"}); $("body").append(panel.container);
我的问题是,有没有办法让对象本身成为div,从而消除了对“容器”div的需求? 然后我可以调用$("body").append(panel);
。
在那里拥有容器div对我来说并不是很麻烦,它更适合我……想要学习正确的做事方式。
我试过this = document.createElement("div");
,但是我收到了一个错误: invalid assignment left-hand side
。
我建议使用ShinyPanel
方法来处理这个问题。 告诉,不要问。
function ShinyPanel(css, attributes) { ... this.appendTo = function (to) { $(to).append(this.container); }
您可以直接从构造函数返回this.container
,假设您不打算使用添加到其中的任何其他属性。
要做到这一点,我认为你必须将它改为工厂方法,而不是构造函数(即不再使用new
– 尽管它还有更多)。
当你想要做的就是将它附加到body,而不是返回一个对象时,你可以只返回一个带有面板的字符串。
像这样的东西:
function shinyPanel(css, attributes) { ... all the stuff you did before return this.container }
此外,如果你想在你的shinyPanel
函数中获得一些速度,你可以尝试添加标记的字符串,然后只使用append
一次。
还要看一下使用数组作为返回字符串的持有者,然后在返回时使用.join('')
。
更多信息: http : //www.learningjquery.com/2009/03/43439-reasons-to-use-append-correctly