J'utilise la fonction suivante pour détecter les valeurs qui appartenaient au constructeur d'un objet au lieu de l'objet lui-même.Comment trouver les valeurs "prototype" en javascript?
function isAPrototypeValue(object, key) {
return !(object.constructor && object.constructor.prototype[key]);
}
cela fonctionnerait comme suit:
Array.prototype.base_value = 'base'
var array = new Array;
array.custom_value = 'custom'
alert(isAPrototypeValue(array, 'base_value')) // true
alert(isAPrototypeValue(array, 'custom_value')) // false
Mais quand j'ai commencé à utiliser l'héritage:
function Base() {
return this
};
Base.prototype.base_value = 'base';
function FirstSub() {
return this
};
FirstSub.prototype = new Base();
FirstSub.prototype.first_value = 'first';
function SubB() {
return this
};
SecondSub.prototype = new FirstSub();
SecondSub.prototype.second_value = 'second';
result = new SecondSub();
et j'ai appelé
alert(result.constructor)
je recevrais base au lieu de l'attendre SecondSub, qui est lui-même pas un gros problème, mais ...
si j'étendu résultat comme ceci:
result.custom_value = 'custom'
result.another_value = 'another'
I se serait attendu à être capable de distinguer entre les valeurs qui appartiennent à résultat ou les valeurs qui appartiennent à SecondSub, FirstSub et Base;
par ex.
alert(isAPrototypeValue(result, 'custom_value')) // false (as expected)
alert(isAPrototypeValue(result, 'base_value')) // true (as expected)
alert(isAPrototypeValue(result, 'first_value')) // true extend, but it is false
alert(isAPrototypeValue(result, 'second_value')) // true extend, but it is false
Comment puis-je changer isAPrototypeValue à multiplier les résultats attendus?
Merci. :) hasOwnProperty() fonctionne comme un charme. – Stefan