1. Наследование объектов в js
В js есть три метода наследования.
1.js прототип (прототип) реализует наследование
Скопируйте код кода следующим образом:
<SPAN style="BACKGROUND-COLOR: #ffffff"><SPAN style="FONT-SIZE: 18px"><html>
<тело>
<тип сценария="текст/javascript">
функция Person(имя,возраст){
это.имя=имя;
this.age=возраст;
}
Person.prototype.sayHello=function(){
alert("Используйте прототип, чтобы получить имя: "+this.name);
}
var per=new Person("Ма Сяоцянь",21);
per.sayHello(); //Вывод: используйте прототип, чтобы получить имя: Ма Сяоцянь
функция Студент(){}
Student.prototype=new Person("Хун Рутонг", 21);
вар stu = новый студент ();
Student.prototype.grade=5;
Student.prototype.intr=function(){
оповещение(this.grade);
}
stu.sayHello();//Вывод: используйте прототип, чтобы получить имя: Хонг Рутонг
stu.intr();//Вывод: 5
</скрипт>
</тело>
</html></SPAN></SPAN>
2. Конструктор реализует наследование
Скопируйте код кода следующим образом:
<SPAN style="FONT-SIZE: 18px"><html>
<тело>
<тип сценария="текст/javascript">
функция Родитель(имя){
это.имя=имя;
this.sayParent=function(){
alert("Родитель:"+this.name);
}
}
функция Ребенок(имя,возраст){
this.tempMethod=Родитель;
this.tempMethod(имя);
this.age=возраст;
this.sayChild=function(){
alert("Ребенок:"+this.name+"age:"+this.age);
}
}
var родитель = новый родитель («Цзян Цзяньчэнь»);
родитель.sayParent(); //Вывод: «Родитель: Цзян Цзяньчэнь»
var child=new Child("李明",24 //Вывод: "Child:李明age:24");
ребенок.sayChild();
</скрипт>
</тело>
</html></SPAN>
3. позвонить, подать заявку на реализацию наследования
Скопируйте код кода следующим образом:
<SPAN style="FONT-SIZE: 18px"><html>
<тело>
<тип сценария="текст/javascript">
функция Person(имя,возраст,любовь){
это.имя=имя;
this.age=возраст;
this.love=любовь;
this.say=функция сказать(){
Предупреждение("Имя:"+имя);
}
}
//вызов метода
функция студент(имя,возраст){
Person.call(это,имя,возраст);
}
//применяем метод
функциональный учитель(имя,любовь){
Person.apply(это,[имя,любовь]);
//Person.apply(this,arguments); //Тот же эффект, что и в предыдущем предложении, аргументы;
}
//Сходства и различия между вызовом и применением:
//1, первый параметр тот же, он относится к текущему объекту
//2, второй параметр отличается: вызов — это список параметров по одному, применить — массив (также можно использовать аргументы)
var per=new Person("Wufenglou",25,"Wei Yingping" //Вывод: "Wufenglou");
пер.сказать();
var stu=new Student("Цао Юй",18);//Вывод: "Цао Юй"
Стю.Сай();
var tea=new Teacher("Qin Jie",16);//Вывод: "Qin Jie"
чай.сказать();
</скрипт>
</тело>
</html></SPAN>
2. Использование функции «Позвони и подайте заявку» (подробное введение)
И вызов, и применение в js могут реализовать наследование. Единственная разница в параметрах заключается в том, что метод записи Apply, соответствующий func.call(func1,var1,var2,var3), выглядит следующим образом: func.apply(func1,[var1,var2,var3]). .
Объяснение вызова в руководстве JS:
Скопируйте код кода следующим образом:
<SPAN style="FONT-SIZE: 18px">метод вызова
Вызовите метод объекта, чтобы заменить текущий объект другим объектом.
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
параметр
этотОбж
Необязательный. Объект, который будет использоваться в качестве текущего объекта.
arg1, arg2, , argN
Необязательный. Будет передана последовательность параметров метода.
иллюстрировать
Метод вызова можно использовать для вызова метода от имени другого объекта. Метод вызова изменяет контекст объекта функции с исходного контекста на новый объект, указанный thisObj.
Если параметр thisObj не указан, в качестве thisObj используется объект Global. </SPAN>
Проще говоря, функция этих двух функций на самом деле заключается в изменении внутреннего указателя объекта, то есть в изменении содержимого, на которое указывает this объекта. Иногда это полезно в объектно-ориентированном программировании на js. Давайте возьмем apply в качестве примера, чтобы поговорить о важной роли этих двух функций в js. нравиться:
Скопируйте код кода следующим образом:
<SPAN style="FONT-SIZE: 18px"> function Person(name,age){ //Определяем класс
это.имя=имя; //имя
this.age=возраст; //Возраст;
this.sayhello=function(){alert(this.name)};
}
function Print(){ //Отображение атрибутов класса
this.funcName="Печать";
this.show=function(){
вар сообщение = [];
for(ключ var в этом){
if(typeof(this[key])!="function"){
msg.push([ключ,":",this[ключ]].join(""));
}
}
оповещение(msg.join(" "));
};
}
function Student(name,age,grade,school){ //Класс студента
Person.apply(this,arguments); // Преимущества перед вызовом
Print.apply(это,аргументы);
this.grade=оценка //Оценка;
this.school=школа; //школа;
}
var p1=новый человек("Бу Кайхуа",80);
p1.sayhello();
var s1=новый студент("Бай Юнфэй",40,9,"Академия Юэлу");
s1.шоу();
s1.sayhello();
предупреждение(s1.funcName);</SPAN>
Кроме того, Function.apply() играет важную роль в повышении производительности программы:
Начнем с функции Math.max(). За Math.max может следовать любое количество параметров, и, наконец, она возвращает максимальное значение среди всех параметров.
например
Скопируйте код кода следующим образом:
<SPAN style="FONT-SIZE: 18px">alert(Math.max(5,8));
оповещение(Math.max(5,7,9,3,1,6)); //9
//Но во многих случаях нам нужно найти самый большой элемент массива.
вар arr=[5,7,9,1];
//alert(Math.max(arr)); // Это не работает. НЭН
//Напишем это так
функция getMax(arr){
вар arrLen=arr.length;
for(var i=0,ret=arr[0];i<arrLen;i++){
ret=Math.max(ret,arr[i]);
}
вернуть возврат;
}
оповещение(getMax(арр)); //9
//Переключаемся для применения, вы можете написать так
функция getMax2(arr){
вернуть Math.max.apply(null,arr);
}
оповещение(getMax2(арр)); //9
//Эти два фрагмента кода преследуют одну и ту же цель, но getMax2 элегантен, эффективен и гораздо более лаконичен.
//Другой пример — метод push массива.
вар arr1=[1,3,4];
вар arr2=[3,4,5];
//Если мы хотим расширить arr2, то добавляем по одному к arr1 и, наконец, пусть arr1=[1,3,4,3,4,5]
//arr1.push(arr2), очевидно, не работает. Потому что при этом вы получите [1,3,4,[3,4,5]]
//Мы можем использовать цикл только для отправки по одному (конечно, вы также можете использовать arr1.concat(arr2), но метод concat не меняет сам arr1)
вар arrLen=arr2.length;
for(var i=0;i<arrLen;i++){
arr1.push(arr2[i]);
}
//С появлением Apply все стало так просто
Array.prototype.push.apply(arr1,arr2); //Теперь желаемый результат — arr1</SPAN>;