// envenenando objeto.prototypeObject.prototype.bar = 1; var foo = {goo: indefinido}; foo.bar; // 1'bar 'em foo; // truefoo.hasownProperty ('bar'); // falsefoo.HasownProperty ('Goo'); // verdadeiroAqui, apenas o HasownProperty pode dar a resposta correta, o que é muito necessário quando se trata de atravessar as propriedades de um objeto. Não há outra maneira em JavaScript para dizer se um atributo é definido no próprio objeto ou herdado da cadeia de protótipos.
HasownProperty como propriedade
O JavaScript não define o HasOwnsProperty como uma palavra sensível, o que significa que você pode ter uma propriedade chamada HasOwnProperty. Neste momento, você não pode mais usar seu método HASOWNPROPERTY para julgar as propriedades; portanto, precisa usar o método externo de HasOwnProperty para fazer julgamentos.
var foo = {hasOwnProperty: function () {return false; }, bar: 'aqui seja dragons'}; foo.HasownProperty ('bar'); // sempre retorna false // use o hasownProperty de outro objeto e chama -o com 'este' definido como foo ({}). hasownproperty.call (foo, 'bar'); // true // também é possível usar o HasOwnsProperty do objeto // protótipo para este proposition.prototype.hasownProperty.call (foo, 'bar'); // verdadeiroResumir
Ao julgar que o atributo de objeto existe, o HasownProperty é o único método que pode ser confiado. Aqui, também queremos lembrá -lo de que, quando usamos para o loop para atravessar objetos, o uso do HASOWNPROPERTY será bom para evitar os problemas causados por extensões de objetos de protótipo.
A seguir, são apresentadas as adições de outros internautas:
HasOwnProperty () no protótipo de objeto de objeto em JavaScript é usado para determinar que uma propriedade é definida no próprio objeto, em vez de herdado da cadeia de protótipos.
Obj.HasownProperty (Prop)
Prop de parâmetro
O nome da string de atributo ou símbolo (ES6) a ser detectado
o = new Object (); O.Prop = 'Existe'; O.HasownProperty ('Prop'); // retorna trueo.HasownProperty ('ToString'); // return falseo.HasownProperty ('HasOwnProperty'); // retorna falseUse o HasownProperty como o nome da propriedade de um objeto
Como o JavaScript não usa o HasownProperty como uma palavra sensível, é muito provável que nomeemos uma propriedade do objeto como HasownProperty, para que não possamos mais usar o método HasownProperty do protótipo de objeto para determinar se a propriedade é da cadeia de protótipos.
var foo = {hasOwnProperty: function () {return false; }, bar: 'aqui seja dragons'}; foo.HasownProperty ('bar'); // sempre retorna falsaComo resolver esse problema por não usar este objeto.HasownProperty Método? Precisamos usar o método real de HasownProperty na cadeia de protótipos:
({}). HasOwnProperty.Call (Foo, 'bar'); // true // ou: object.prototype.HasownProperty.Call (Foo, 'bar'); // verdadeiroReferência: https://developer.mozilla.org/zh-cn/docs/web/javascript/reference/global_objects/object/hasownproperty