我正在尝试学习和理解javascript中的对象,并提出了以下脚本:
jQuery(document).ready(function(){
var test = new Project('Anton');
$('#btn_add_project').click(function(){
test.addElement();
});
});
function Project(name)
{
this.panel = $('#worksheet_panel');
this.name = name;
function changeName(name)
{
this.name = name;
}
function addElement()
{
this.element =
'<div id="1" class="col-md-3 table-bordered worksheet_overall_box" draggable="true" ondragstart="drag(event)">'+
'<div class="table-bordered title_box">'+
'<h4 class="title text-center worksheet_title">Dansk handicap</h4>'+
'</div>'+
'<div class="worksheet_box">'+
' <div class="list-group ">'+
' <a href="#" class="list-group-item">'+
' <h5 class="list-group-item-heading">Marc</h5>'+
' <p class="list-group-item-text">...</p>'+
' </a>'+
' </div>'+
' <div class="list-group ">'+
' <a href="#" class="list-group-item">'+
' <h5 class="list-group-item-heading">'+name+'</h5>'+
' <p class="list-group-item-text">...</p>'+
' </a>'+
' </div>'+
' <div class="list-group">'+
' <button class="btn-block btn-primary btn">Add</button>'+
' </div>'+
'</div>'+
'</div>';
this.panel.appendChild(this.element);
}
}
然而,当我运行click功能时,我收到以下错误:
TypeError: test.addElement is not a function
test.addElement();
谁能告诉我我做错了什么?
答案 0 :(得分:1)
addElement
是一个仅在Project
范围内可用的函数声明。将函数附加到prototype
以使其可用于新实例,其中this
引用实例。
Project.prototype.addElement = function() {
this.element = ...
};
答案 1 :(得分:1)
在javascript中有不同的方法来编写类(即不同的语法),但最终都在相同的内部结构中。
我通常使用这种语法:一个声明类的anonimous函数。然后我将它导出到声明的命名空间。
// declare a namesapce
var NAMESPACE = NAMESPACE || {};
(function() {
function Project() {
}
Project.prototype.addElement = function() {
}
// export here!
NAMESPACE.Project = Project;
})();
var test = new NAMESPACE.Project();
test.addElement();