Si je get
avec defineProperty
utilisation DefineProperty obtenir et de la valeur ainsi que
Object.defineProperty(Object.prototype,'parent',{
get:function(){return this.parentNode}
});
et je peux l'appeler comme: document.body.parent
, il fonctionne.
Lorsque j'utilise value
avec defineProperty
Object.defineProperty(Object.prototype,'parent',{
value:function(x){
var temp=this.parentNode;
for(var i=1;i<x;i++){temp=temp.parentNode};
return temp
}
});
Je peux l'appeler comme: document.getElementsByName("newtag").parent(2)
, signifie pour trouver le nœud parent du nœud parent de newTag.
Mais quand je les ai mis ensemble il est dit Uncaught TypeError: Invalid property. A property cannot both have accessors and be writable or have a value
.
Comment puis-je faire pour que je puisse appeler dans les deux sens, .parent
& .parent(n)
?
Pas jQuery
Je sais que c'est hors sujet, mais pourquoi étendez-vous 'Object.prototype' afin d'améliorer les éléments DOM? Il ne semble pas utile d'ajouter des méthodes DOM-centric à * tous * les objets. –
@CrazyTrain Je comprends votre préoccupation ... mais tout ce que je fais est nécessaire ... – NazKazi
@BlackCobra: Non, vous ne pouvez pas créer une valeur qui est à la fois un nœud DOM et une fonction. Et ce n'est même pas quelque chose à faire avec le mélange de descripteurs d'accesseur et de propriétés de données. S'il vous plaît dites-nous [quel est votre problème réel] (http://meta.stackexchange.com/q/66377) - ce que vous auriez besoin de cette extension DOM étrange pour - et nous pourrions être en mesure de proposer une meilleure solution. – Bergi