2010-02-04 5 views
0

Alors que je suis en train de créer un objet comme celui-cijavascript erreur lors de la création objet

new Ext.TitleCheckbox() 

Je reçois « pas une erreur constructeur »

mon objet est

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; 
    } 

}; 

ce qui est l'erreur ici?

Répondre

3

Ext.TitleCheckbox n'est pas une fonction, vous ne pouvez pas faire un appel de fonction à un littéral d'objet. Si vous souhaitez utiliser l'opérateur new, vous devez restructurer votre code pour créer TitleCheckbox et constructor function.

Quelque chose comme ça (assumming que l'objet existe 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() { 
    //... 
}; 
0

Voir CMS la réponse pourquoi. En tant que solution de rechange, si vous avez vraiment besoin de faire cela, vous pouvez le faire via l'héritage. En javascript Les constructeurs héritent des objets (un constructeur est juste une fonction). Donc:

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(); 
Questions connexes