From 68fc8e96a9629e73469ed457abd955e548ec670c Mon Sep 17 00:00:00 2001 From: Florian Merz Date: Thu, 11 Feb 2021 14:49:58 +0100 Subject: unslug pt-br: move --- .../index.html | 280 +++++++++++++++++++++ 1 file changed, 280 insertions(+) create mode 100644 files/pt-br/web/javascript/enumerability_and_ownership_of_properties/index.html (limited to 'files/pt-br/web/javascript/enumerability_and_ownership_of_properties') diff --git a/files/pt-br/web/javascript/enumerability_and_ownership_of_properties/index.html b/files/pt-br/web/javascript/enumerability_and_ownership_of_properties/index.html new file mode 100644 index 0000000000..3d7feb0bd4 --- /dev/null +++ b/files/pt-br/web/javascript/enumerability_and_ownership_of_properties/index.html @@ -0,0 +1,280 @@ +--- +title: Enumerabilidade e posse de propriedades +slug: Web/JavaScript/Enumerabilidade_e_posse_de_propriedades +tags: + - JavaScript +translation_of: Web/JavaScript/Enumerability_and_ownership_of_properties +--- +
{{JsSidebar("Mais")}}
+ +

+Propriedades enumeráveis são aquelas propriedades cuja flag interna [[Enumerable]] é verdadeira (true), que é o padrão para propriedades criadas via assinatura simples ou através de um inicializador (propriedades definidas através de  Object.defineProperty e tipo padrão [[Enumerable]] falso (false)).
+ +
 
+ +
Propriedades enumeráveis aparecem em for...in loops exceto se o nome da propriedade for um objeto Symbol. Posse de propriedades é determinada pelo fato da propriedade pertencer ao objeto diretamente e não a uma cadeira de protótipos. Propriedades de um objeto pode também ser recuperadas diretamente. Há um número de built-in de detecção, iteração/enumeração e recuperação de propriedades,  com o gráfico mostrando que estão disponíveis. 
+ +
 
+ +
O código de exemplo a seguir demostra como obter as categorias que faltam.
+ +
 
+ +
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Propriedade de enumerabilidade e posse - métodos internos de detecção, recuperação, e iteração
FuncionalidadePróprio objeto +

Próprio objeto e sua cadeia de caracteres

+
Somente cadeia de protótipos
Detecção + + + + + + + + + + + + + + + +
EnumerávelNão enumerávelEnumerável e Não enumerável
propertyIsEnumerablehasOwnProperty e não propertyIsEnumerablehasOwnProperty
+
Não disponível sem código extraNão disponível sem código extra
Recuperação + + + + + + + + + + + + + + + +
EnumerávelNão enumerávelEnumerável e Não enumerável
Object.keysgetOwnPropertyNames filtrou-se para incluir as propriedades quando não passado propertyIsEnumerablegetOwnPropertyNames
+
Não disponível sem código extraNão disponível sem código extra
Iteração + + + + + + + + + + + + + + + +
EnumerávelNão enumerávelEnumerável e Não enumerável
Iterar Object.keys +

itera getOwnPropertyNames filtrou-se para incluir as propriedades quando não passado propertyIsEnumerable

+
iterar getOwnPropertyNames
+
+ + + + + + + + + + + + + + + +
EnumerávelNão enumerávelEnumerável e Não enumerável
for..inNão disponível sem código extraNão disponível sem código extra
+
Não disponível sem código extra
+ +

Obtendo propriedades por enumerabilidade/posse

+ +

 

+ +

Note que não é o algoritmo mais eficiente para todos os casos, mas útil para uma demonstração rápida.

+ + + +
var SimplePropertyRetriever = {
+    getOwnEnumerables: function (obj) {
+        return this._getPropertyNames(obj, true, false, this._enumerable);
+         // Ou poderia usar for..in filtrado com hasOwnProperty ou apenas isto: return Object.keys(obj);
+    },
+    getOwnNonenumerables: function (obj) {
+        return this._getPropertyNames(obj, true, false, this._notEnumerable);
+    },
+    getOwnEnumerablesAndNonenumerables: function (obj) {
+        return this._getPropertyNames(obj, true, false, this._enumerableAndNotEnumerable);
+        // Ou apenas use: return Object.getOwnPropertyNames(obj);
+    },
+    getPrototypeEnumerables: function (obj) {
+        return this._getPropertyNames(obj, false, true, this._enumerable);
+    },
+    getPrototypeNonenumerables: function (obj) {
+        return this._getPropertyNames(obj, false, true, this._notEnumerable);
+    },
+    getPrototypeEnumerablesAndNonenumerables: function (obj) {
+        return this._getPropertyNames(obj, false, true, this._enumerableAndNotEnumerable);
+    },
+    getOwnAndPrototypeEnumerables: function (obj) {
+        return this._getPropertyNames(obj, true, true, this._enumerable);
+        // Ou poderia usar filtrado for..in
+    },
+    getOwnAndPrototypeNonenumerables: function (obj) {
+        return this._getPropertyNames(obj, true, true, this._notEnumerable);
+    },
+    getOwnAndPrototypeEnumerablesAndNonenumerables: function (obj) {
+        return this._getPropertyNames(obj, true, true, this._enumerableAndNotEnumerable);
+    },
+    // Private static property checker callbacks
+    _enumerable : function (obj, prop) {
+        return obj.propertyIsEnumerable(prop);
+    },
+    _notEnumerable : function (obj, prop) {
+        return !obj.propertyIsEnumerable(prop);
+    },
+    _enumerableAndNotEnumerable : function (obj, prop) {
+        return true;
+    },
+    // Inspirado por http://stackoverflow.com/a/8024294/271577
+    _getPropertyNames : function getAllPropertyNames(obj, iterateSelfBool, iteratePrototypeBool, includePropCb) {
+        var props = [];
+
+        do {
+            if (iterateSelfBool) {
+                Object.getOwnPropertyNames(obj).forEach(function (prop) {
+                    if (props.indexOf(prop) === -1 && includePropCb(obj, prop)) {
+                        props.push(prop);
+                    }
+                });
+            }
+            if (!iteratePrototypeBool) {
+                break;
+            }
+            iterateSelfBool = true;
+        } while (obj = Object.getPrototypeOf(obj));
+
+        return props;
+    }
+};
+ +

Tabela de Detecção

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 infor..inhasOwnPropertypropertyIsEnumerablein Object.keysin Object.getOwnPropertyNamesin Object.getOwnPropertyDescriptors
Enumeráveltruetruetruetruetruetruetrue
Não enumeráveltruefalsetruefalsefalsetruetrue
Inherited Enumerabletruetruefalsefalsefalsefalsefalse
Inherited Nonenumerabletruefalsefalsefalsefalsefalsefalse
Account for Symbols keystruefalsetruetruefalsefalsetrue
+ +

Veja também

+ + -- cgit v1.2.3-54-g00ecf