Resume muitas pequenas tempo para absorver esse conhecimento para Bingo esqueça de ler.
Sobre orientada a objeto
recursos orientados a objetos:
- Ele tem uma identificação única
- com o status
- Behavior
JS objeto orientada JAVA e realização de idéias não é o mesmo, JS não é uma classe com base em um protótipo baseado. Mas os JS, a fim de olhar mais como JAVA, para este fim uma série de recursos adicionais.
Para pôr de lado as propriedades olhar como JAVA introduzido, JS resumo orientada a objeto é simples: Cada objeto tem um protótipo, não consegue encontrar a propriedade foi encontrar-se em objeto de protótipo até Object.prototype.
ES3 era a fim de operar o protótipo que não só pode usar new
, mas introduz um método especial de operação do protótipo após ES5:
- Object.create ()
- Object.setPrototypeOf ()
- Object.getPrototypeOf ()
Para que possamos colocar de lado o conceito de classes de frente para o protótipo orientada a objetos.
JS para a porção JAVA simulação orientada por objectos
As seções a seguir são analógicos atua JAVA no meu entendimento:
- nova função pode ser invocado
- A introdução deste mecanismo
- operador instanceof
Chamando nova função é principalmente para fazer três coisas:
- Use nova função é chamada a propriedade protótipo para construir um novo objeto
- O novo objeto como esta função, a função é chamada
- Tal como o tipo devolvido nenhuma referência a este novo objecto é devolvido
Acima é a classe de simulação JAVA, retiradas no novo ES5 podemos fazer a mesma coisa, e não ter pessoas pensam que isto é uma classe.
isso é ainda mais complexa, um grande número de artigos para explicar isso no JS, que pode ser visto um pouco complicado.
Os dados de tipo JS
JS um total de sete tipos de dados:
- Nulo
- Indefinido
- Número
- Corda
- boleano
- Símbolo (ES6 nova adição)
- Objecto (tipos de referência)
Sete tipos de tipos de dados foi dividida em duas categorias: tipos primitivos e tipos de referência.
Como determinar o tipo de dados correspondentes ao tipo de dados é?
Há três resumo: typeof
, instanceof
e Object.prototype.toString.call()
, destes três tem suas próprias características.
tipo de
Pode retornar substancialmente correspondente para o tipo de dados, com duas excepções, é um typeof null
retorno "object"
, e a outra é typeof function() {}
devolvido"function"
instancia de
À esquerda é um objeto à direita é um construtor.
instanceof vai atravessar o objeto de protótipo, descobrir se existe uma propriedade protótipo da função.
Eu acho que, para verificar se matriz de dados é muito conveniente [] instanceof Array
, é claro, isso é problemático, de modo a parte de trás e fornece um Array.isArray()
método para determinar se a matriz.
Object.prototype.toString.call ()
Este método fornece um valor de retorno muito detalhado, o que não só irá devolver o tipo do acima, também inclui muitos objectos embutidos JS, por exemplo: Array
, Date
, RegExp
e semelhantes.
Mas esse objeto tem um problema, ele vai forçar a embalagem . Esse julgamento não é um tipo básico ou um tipo de referência, se cuidado se a necessidade de cumprir typeof
.
Object.prototype.toString.call(1); // [object Number]
Object.prototype.toString.call(new Number(1)); // [object Number]
O valor de retorno é o mesmo.
Sobre boxing e unboxing
Ele diz boxing e unboxing é necessário mencionar sobre sua aparência - tipo de conversão implícita.
JS aplicações de conversão de tipo amplamente implícito, é a mais conhecida ==
. Não quando chamar diretamente o str.indexOf
método quando, str, obviamente, não sendo dado valor básico é encaixotado no trabalho.
embalagem
Cada um tem um valor que corresponde substancialmente a classes de objectos, um valor de base da embalagem é convertido em um tipo de objecto correspondente. Mas pelo novo símbolo não é chamado, por isso temos de pensar em outras maneiras.
Os supra-mencionados Object.prototype.toString.call
forças embalagem:
function a() {
return this;
}
a.call(Symbol()) // 查看打印
Desembalar (toPrimitive)
Ele chama o objeto antes de desembalar valueOf
método, se o valor de retorno é valores não-básicos podem ser recuperados toString
, o valor de retorno é o valor de erro não-básico.
Lembre-se das perguntas rosto Pianmen isso?
if (a == 2 && a == 3) {
console.log(true);
}
Embora a língua é o lado ruim, mas também pode compreender o seguinte. Aqui usou a desconsolidação de conhecimento.
Se um é um primitivo e fazer ==
a comparação, em primeiro lugar um desembalar, desembalagem passos como descrito acima.
let b = 1;
let a = {
valueOf: () => ++b
}
if (a == 2 && a == 3) {
console.log(true);
}
Isto irá imprimir true
.
personalizado unboxing
Sobre desembalar palavra final é que agora você pode personalizar o comportamento.
let o = {
[Symbol.toPrimitive]: () => "hello world"
};
console.log('' + o);
Número
Sobre Number One dúvida é NaN, no final, não é um número. typeof NaN
Na verdade, o retorno de número. Portanto, não é um número é um número.
Nós todos sabemos que existem problemas de precisão em JS digitais: 0.1 + 0.2 === 0.3
retornos falsos. Desta vez ele vai ajudar Number.EPSILON para nos ajudar a julgar Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON
.
JS é distinguir entre 0 e -0, mas +0 === -0
retorna verdadeiro. Então, como distinguir entre 0 e -0-lo, este é o polyfill problema Object.is () precisa ser considerado.
Podemos ser distinguido pelo denominador e com +0 -0:
1 / 0 === Infinity // true
1 / -0 === -Infinity // true
1 / 0 === 1 / -0 // false
função
Pelo desenvolvimento real, sabemos que algumas funções pode ser chamado diretamente e uso new
chamar alguns ponteiro de função por new
chamar algumas funções só pode ser chamado diretamente.
Atrás desta existe um mecanismo de controlo. JS tipo de dados é geralmente divididos em dois tipos, um tipo básico é um tipo de referência. É lógico, então, que a função não é um tipo básico é um tipo de referência, um tipo de referência é o único objeto que é uma função de um objeto, por que o objeto pode chamar essa função e outras não objetos de TI?
Isso ocorre porque o objeto de função tem duas propriedades privadas determinar as características do anterior, não temos os meios para definir e visualizar tanto a propriedade privada. Um deles é [[constructor]]
, o outro [[call]]
. Respectivamente determina se a chamada pode ser chamado diretamente pelo novo e.
Nota : Você não pode chamar a nova função por exemplo () => {}
setas funções, tais funções não pode chamar diretamente Image
a função fornecida por um ambiente como esse.
Estão resumidas no tempo imediato re-aprender a secção dianteira, inverno disse que o conhecimento é livre, taxa de educação, resumiu aqui deve ser considerada conhecimento, a educação permaneceu em uma coluna no.