我正在尝试创建像这样的对象
new Ext.TitleCheckbox ()
我得到“不是构造函数错误”
我的对象是
Ext.TitleCheckbox = {
checked:false,
constructor : function() {
},
getHtml : function (config) {
var prop = (!config.checked)?'checkbox-checked':'checkbox-unchecked';
var html = config.title+'<div class="'+prop+'" onclick="Ext.TitleCheckbox.toggleCheck(this)"> </div>';
return html;
},
toggleCheck : function (ele){
if(ele.className == 'checkbox-checked') {
ele.className = 'checkbox-unchecked';
}
else if(ele.className == 'checkbox-unchecked') {
ele.className = 'checkbox-checked';
}
},
setValue : function(v){
this.value = v;
},
getValue : function(){
return this.value;
}
};
这里的错误是什么?
答案 0 :(得分:3)
Ext.TitleCheckbox
不是函数,不能对对象文字进行函数调用。
如果您想使用new
运算符,则应重新构建代码,使TitleCheckbox
成为constructor function。
像这样(假设Ext
对象存在):
Ext.TitleCheckbox = function () {
// Constructor logic
this.checked = false;
};
// Method implementations
Ext.TitleCheckbox.prototype.getHtml = function (config) {
//...
};
Ext.TitleCheckbox.prototype.toggleCheck = function (ele) {
//...
};
Ext.TitleCheckbox.prototype.setValue = function (v) {
//...
};
Ext.TitleCheckbox.prototype.getValue = function () {
//...
};
答案 1 :(得分:0)
请参阅CMS的答案原因。作为一种解决方案,如果你真的需要这样做,你可以通过继承来做到这一点。在javascript中构造函数继承自对象(构造函数只是一个函数)。所以:
function MyCheckbox () {} ; /* all we really need is a function,
* it doesn't actually need to do anything ;-)
*/
// now make the constructor above inherit from the object you desire:
MyCheckbox.prototype = Ext.TitleCheckbox;
// now create a new object:
var x = new MyCheckbox();