2011-11-21 16 views
5

¿Es posible anular la propiedad HTMLElement.classList en WebKit (Chrome)?Sobrescritura de la propiedad HTMLElement.classList

que estoy tratando con el siguiente código:

Object.defineProperty(window.HTMLElement.prototype, "classList", { 
     get : function() { 
      console.log("test"); 
      return 1; 
     }, 
     set : function(newValue){ }, 
     enumerable : true, 
     configurable : true} 
    ); 

Sin embargo, llamando classList de un DIV todavía volvería la DOMTokenList.

+1

No sé si está creando el div de forma dinámica, pero si es así, puede sobrescribir 'document.createElement' y definir' classList' en el elemento creado antes de devolver el elemento. – pimvdb

Respuesta

2

supongo que debe hacer lo que has hecho con HTMLDivElement, no HTMLElement. Sin embargo, lo hice y aún no obtuve ningún resultado.

Pero si usted quiere hacer su trabajo por el momento, se puede aplicar el código directamente en la instancia div sí:

<div id='target' class='first second third'> 
</div> 

y:

var div = document.getElementById('target'); 
Object.defineProperty(div, 'classList', { 
    get: function(){ 
     return 'overridden'; 
    } 
}); 
alert(div.classList); 

ver este fiddle.

3

Su div no obtiene classList del prototipo. Es una propiedad directa de div. La cadena de prototipos no se busca:

myDiv.hasOwnProperty("classList"); // returns true 
+0

Entonces, ¿habría una manera de anular el getter si conozco el objeto concreto? – Erik

+0

Tendría que hacerlo uno a la vez, en los elementos individuales a los que apunta. 'Object.defineProperty (myDiv," classList ", ...' – gilly3

Cuestiones relacionadas