Anteontem, um internauta deixou uma mensagem me perguntando, o que é Object? Como estive ocupado reconstruindo o controle TreeView nos últimos dois dias, lamento muito não ter respondido a tempo. Reserve algum tempo hoje para dar uma olhada no que exatamente é Object em JavaScript? Qual é a relação entre Objeto e Função? Aceito correções se estiver errado.
Embora seja uma mensagem privada, espero que você não me culpe se enviá-la anonimamente. Se houver algo errado, por favor me avise.
Qual é exatamente o objeto de js?
A princípio pensei que Object fosse o protótipo de todos os objetos em js.
Mas: alert(Object.constructor) exibe a função Function...
Isso significa que o protótipo do Object é Function?
Mas o problema surge novamente:
Function.prototype.read=function(){};//protótipo de função estendida
for(var i in Object)alert(i)//exibe read, o que confirma ainda que o protótipo de Object é Function
Object.prototype.read=function(){};//estende o protótipo de Object
for(var i in Function)alert(i)//Exibir leitura, o protótipo de Function é Object? ? ? ?
O que exatamente é objeto? Objeto e Função como classes são a mesma coisa?
Este amigo confundiu Construtor, Protótipo e Função porque JavaScript é uma linguagem baseada em objetos (JavaScript não contém classes adequadas). Na verdade, é possível dizer que Object é o protótipo de todos os objetos, mas isso se refere ao conceito de protótipo no Prototype Pattern no padrão de design, não ao recurso de linguagem de protótipo do JavaScript chamado Object.prototype.
Então, o que exatamente é Object em JavaScript? Script56.chm (o tutorial oficial do M$) diz: Fornece funções comuns para todos os objetos JScript. Bem, você entende? Porque eu deveria entender, mas ainda parece que não entendi @_@. Se observarmos a estrutura de dados, um objeto (uma instância de Object) é uma coleção não ordenada, uma estrutura semelhante a map em C++, hashtable em C# e hashmap em Java. E contém um valor primitivo atribuído pelo sistema de linguagem JavaScript. Object possui um método chamado valueOf, sua função é retornar o valor original do objeto especificado. Isso também pode ser encontrado no Script56, e também há uma tabela listando os resultados de retorno valueOf dos objetos do sistema. Em outras palavras, objetos como Array, Boolean, Date, Function, Number, etc., na verdade, todos vêm de Object, e seus ancestrais são todos Object. Eles representam diferentes recursos de linguagem. Por exemplo, Array possui um atributo de comprimento gerenciado automaticamente, Boolean possui apenas valores verdadeiros ou falsos, Date representa uma estrutura de tempo e Function pode ser executado. Todos esses são recursos fornecidos a eles por seu tipo original (valueOf). ). Na verdade, objeto é apenas um conceito. A linguagem JavaScript é baseada em objetos, o que significa que todos os tipos integrados são abstraídos de um conjunto de métodos e propriedades comuns (também chamados de comportamentos e estados). essas características é Objeto. Na verdade, Object não é muito útil em programação. Todos nós usamos o objeto de instância de Object e, em seguida, usamos o recurso de coleção de Object (expandindo) para expandir o objeto para se tornar o que queremos. Para Object.prototype, na verdade não é muito útil, porque cada tipo específico tem seu próprio protótipo, e a maioria dos métodos de protótipo que adicionamos são para determinados tipos.
Além do protótipo, Object também possui um atributo muito importante - construtor. Essa coisa é usada para completar a expansão do objeto que mencionei anteriormente. Também é a base para usarmos JavaScript para simular OOP. Como tudo em JavaScript é Object, o construtor também o é, mas seu tipo original é Function (execute Object.constructor.valueOf() para obter: function Function() { [código nativo] }). É claro que, por outro lado, nem todos os objetos JavaScript possuem um atributo construtor, e alguns objetos integrados não possuem um construtor.
Em relação ao relacionamento entre Objeto e Função, acho que este não é um bom código de teste: Function.prototype.read=function(){};//Prototipo de Função Estendida
for(var i in Object)alert(i)//exibe read, o que confirma ainda que o protótipo de Object é Function
Object.prototype.read=function(){};//estende o protótipo de Object
for(var i in Function)alert(i)//Exibir leitura, o protótipo de Function é Object?
Essas quatro linhas de código são usadas para explicar o princípio do protótipo do JavaScript e simular o método de herança de protótipo da programação OO. No entanto, elas não podem explicar claramente a relação entre Objeto e Função: (Pelo contrário, elas vão enganar! o público.
Vamos descrever brevemente cada uma das diversas funções em JavaScript.
Objeto Nativo: Objetos fornecidos pela linguagem JavaScript que não dependem do host de execução. Alguns deles são objetos integrados, como Global e Math, alguns são criados e utilizados no ambiente de execução do script, como: Array, Boolean; , Data, Função, Número, Objeto, RegExp, Erro.
Objeto integrado: objetos integrados fornecidos pela linguagem JavaScript que não dependem do host de execução, como objetos globais e matemáticos, são todos objetos nativos.
Objeto Host: Qualquer objeto fornecido pela linguagem JavaScript que depende do ambiente host. Todos os objetos Objeto não nativos são objetos host, como: janela no IE, instância wscript no WScript, qualquer classe criada pelo usuário.