创建对象时出现javascript错误

时间:2010-02-04 01:50:40

标签: javascript

我正在尝试创建像这样的对象

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)">&#160;</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;
     }

};

这里的错误是什么?

2 个答案:

答案 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();