1. Herança de objetos em js
Existem três métodos de herança em js
Protótipo 1.js (protótipo) implementa herança
Copie o código do código da seguinte forma:
<SPAN style="BACKGROUND-COLOR: #ffffff"><SPAN style="FONT-SIZE: 18px"><html>
<corpo>
<script type="texto/javascript">
function Pessoa(nome,idade){
este.nome=nome;
esta.idade=idade;
}
Pessoa.prototype.sayHello=função(){
alert("Use protótipo para obter o nome: "+this.name);
}
var por=nova Pessoa("Ma Xiaoqian",21);
per.sayHello(); //Saída: Use o protótipo para obter o nome: Ma Xiaoqian
função Aluno(){}
Student.prototype=nova Pessoa("Hong Rutong",21);
var stu=novo Aluno();
Aluno.prototype.nota=5;
Aluno.prototype.intr=função(){
alerta(este.grau);
}
stu.sayHello();//Saída: Use o protótipo para obter o nome: Hong Rutong
stu.intr();//Saída: 5
</script>
</body>
</html></SPAN></SPAN>
2. Construtor implementa herança
Copie o código do código da seguinte forma:
<SPAN style="FONT-SIZE: 18px"><html>
<corpo>
<script type="texto/javascript">
função Pai(nome){
este.nome=nome;
this.sayParent=função(){
alert("Pai:"+este.nome);
}
}
função Filho(nome,idade){
this.tempMethod=Pai;
this.tempMethod(nome);
esta.idade=idade;
this.sayChild=função(){
alert("Criança:"+this.name+"idade:"+this.age);
}
}
var pai=novo Pai("Jiang Jianchen");
parent.sayParent(); //Saída: "Pai: Jiang Jianchen"
var filho=new Filho("李明",24); //Saída: "Criança:李明idade:24"
filho.sayCriança();
</script>
</body>
</html></SPAN>
3.call, inscreva-se para implementar herança
Copie o código do código da seguinte forma:
<SPAN style="FONT-SIZE: 18px"><html>
<corpo>
<script type="texto/javascript">
function Pessoa(nome,idade,amor){
este.nome=nome;
esta.idade=idade;
isto.amor=amor;
this.say=função dizer(){
alerta("Nome:"+nome);
}
}
//chama método
função aluno(nome,idade){
Pessoa.call(este,nome,idade);
}
//aplica método
função professor(nome,amor){
Person.apply(isto,[nome,amor]);
//Person.apply(this,arguments); //Mesmo efeito da frase anterior, argumentos
}
//Semelhanças e diferenças entre call e aply:
//1, o primeiro parâmetro é o mesmo, refere-se ao objeto atual
//2, o segundo parâmetro é diferente: call é uma lista de parâmetros um por um; apply é um array (argumentos também podem ser usados)
var per=new Pessoa("Wufenglou",25,"Wei Yingping"); //Saída: "Wufenglou");
por.say();
var stu=novo aluno("Cao Yu",18);//Saída: "Cao Yu"
stu.say();
var tea=novo professor("Qin Jie",16);//Saída: "Qin Jie"
chá.dizer();
</script>
</body>
</html></SPAN>
2. Uso de ligar e aplicar (introdução detalhada)
Tanto call quanto apply em js podem implementar herança. A única diferença de parâmetro é que o método de escrita apply correspondente a func.call(func1,var1,var2,var3) é: func.apply(func1,[var1,var2,var3]) .
A explicação da chamada no manual JS:
Copie o código do código da seguinte forma:
<SPAN style="FONT-SIZE: 18px">método de chamada
Chame um método em um objeto para substituir o objeto atual por outro objeto.
chamar([thisObj[,arg1[, arg2[, [,.argN]]]]])
parâmetro
esteObj
Opcional. O objeto que será usado como objeto atual.
arg1, arg2, , argN
Opcional. Uma sequência de parâmetros do método será passada.
ilustrar
O método call pode ser usado para chamar um método em nome de outro objeto. O método call altera o contexto do objeto de uma função do contexto inicial para o novo objeto especificado por thisObj.
Se o parâmetro thisObj não for fornecido, o objeto Global será usado como thisObj. </SPAN>
Simplificando, a função dessas duas funções é na verdade alterar o ponteiro interno do objeto, ou seja, alterar o conteúdo apontado por this do objeto. Às vezes, isso é útil na programação js orientada a objetos. Tomemos apply como exemplo para falar sobre o importante papel dessas duas funções em js. como:
Copie o código do código da seguinte forma:
<SPAN style="FONT-SIZE: 18px"> function Person(name,age){ //Definir uma classe
este.nome=nome; //nome
this.age=idade; //Idade
this.sayhello=function(){alert(this.name)};
}
function Print(){ //Exibe atributos da classe
this.funcName="Imprimir";
this.show=função(){
var mensagem=[];
for(var chave neste){
if(typeof(this[chave])!="função"){
msg.push([chave",:",esta[chave]].join(""));
}
}
alerta(msg.join(" "));
};
}
function Aluno(nome,idade,série,escola){ //Turma do aluno
Person.apply(this,arguments); // Vantagens em relação à chamada;
Print.apply(isto,argumentos);
this.grade=nota;
this.school=escola; //escola
}
var p1=nova Pessoa("Bu Kaihua",80);
p1.sayolá();
var s1 = novo aluno("Bai Yunfei",40,9,"Academia Yuelu");
s1.show();
s1.sayolá();
alerta(s1.funcName);</SPAN>
Além disso, Function.apply() desempenha um papel importante na melhoria do desempenho do programa:
Vamos começar com a função Math.max(). Math.max pode ser seguido por qualquer número de parâmetros e, finalmente, retorna o valor máximo entre todos os parâmetros.
por exemplo
Copie o código do código da seguinte forma:
<SPAN style="FONT-SIZE: 18px">alert(Math.max(5,8));
alerta(Math.max(5,7,9,3,1,6));
//Mas em muitos casos, precisamos encontrar o maior elemento do array.
var arr=[5,7,9,1];
//alert(Math.max(arr)); // Isso não funciona. NaN
//Escreve assim
função getMax(arr){
var arrLen=arr.comprimento;
for(var i=0,ret=arr[0];i<arrLen;i++){
ret=Math.max(ret,arr[i]);
}
retorno ret;
}
alerta(getMax(arr)); //9
//Mude para aplicar, você pode escrever assim
função getMax2(arr){
retornar Math.max.apply(null,arr);
}
alerta(getMax2(arr));
//Os dois trechos de código atingem o mesmo propósito, mas getMax2 é elegante, eficiente e muito mais conciso.
//Outro exemplo é o método push do array.
var arr1=[1,3,4];
var arr2=[3,4,5];
//Se quisermos expandir arr2, anexe a arr1 um por um e, finalmente, deixe arr1=[1,3,4,3,4,5]
//arr1.push(arr2) obviamente não funciona. Porque fazer isso obterá [1,3,4,[3,4,5]]
//Só podemos usar um loop para empurrar um por um (é claro que você também pode usar arr1.concat(arr2), mas o método concat não altera o próprio arr1)
var arrLen=arr2.length;
for(var i=0;i<arrLen;i++){
arr1.push(arr2[i]);
}
//Desde a introdução do Apply, as coisas se tornaram tão simples
Array.prototype.push.apply(arr1,arr2); //Agora arr1 é o resultado desejado</SPAN>