2024年10月js中继承的几种用法总结?JS类的创建与继承

 更新时间:2024-10-11 11:22:44

  ⑴js中继承的几种用法总结?JS类的创建与继承

  ⑵无法在创建子类实例的时候传入参数??????.无法实现多继承(一个子类继承多个父类??????.原型上的属性、方法被所有的实例共享??创建子类函数,可以在创建实例时传参??????.可以实现多继承缺点:.无法继承父类原型上的属性和方法???????.因为原型上没有方法,继承实现方法如下:????函数内调用原型式继承,让子函数的原型上拥有构造函数的全部属性和方法(包括构造函数的原型上的方法和属性,创建例子如下:??JS类的继承主要有种方式:原型链继承、实例继承、组合继承、原型式继承、寄生继承、寄生组合继承??创建空的子函数,继承实现方法如下:优点:全身都是优点缺点:实现复杂js中有哪些继承方式继承的方式一共有三种:一、原型继承通过prototype来实现继承,call方法可将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象,浪费内存????????创建一个函数传入要继承的父对象。

  ⑶js中继承的几种用法总结

  ⑷一,js中对象继承js中有三种继承方式.js原型(prototype实现继承复制代码代码如下:《SPANstyle="BACKGROUND-COLOR:#ffffff"》《SPANstyle="FONT-SIZE:px"》《html》《body》《scripttype="text/javascript"》functionPerson(name,age){this.name=name;this.age=age;}Person.prototype.sayHello=function(){alert("使用原型得到Name:"+this.name);}varper=newPerson("马小倩",);per.sayHello();//输出:使用原型得到Name:马小倩functionStudent(){}Student.prototype=newPerson("洪如彤",);varstu=newStudent();Student.prototype.grade=;Student.prototype.intr=function(){alert(this.grade);}stu.sayHello();//输出:使用原型得到Name:洪如彤stu.intr();//输出:《/script》《/body》《/html》《/SPAN》《/SPAN》.构造函数实现继承复制代码代码如下:《SPANstyle="FONT-SIZE:px"》《html》《body》《scripttype="text/javascript"》functionParent(name){this.name=name;this.sayParent=function(){alert("Parent:"+this.name);}}functionChild(name,age){this.tempMethod=Parent;this.tempMethod(name);this.age=age;this.sayChild=function(){alert("Child:"+this.name+"age:"+this.age);}}varparent=newParent("江剑臣");parent.sayParent();//输出:“Parent:江剑臣”varchild=newChild("李鸣",);//输出:“Child:李鸣age:”child.sayChild();《/script》《/body》《/html》《/SPAN》.call,apply实现继承复制代码代码如下:《SPANstyle="FONT-SIZE:px"》《html》《body》《scripttype="text/javascript"》functionPerson(name,age,love){this.name=name;this.age=age;this.love=love;this.say=functionsay(){alert("姓名:"+name);}}//call方式functionstudent(name,age){Person.call(this,name,age);}//apply方式functionteacher(name,love){Person.apply(this,);//Person.apply(this,arguments);//跟上句一样的效果,arguments}//call与aplly的异同://,第一个参数this都一样,指当前对象//,第二个参数不一样:call的是一个个的参数列表;apply的是一个数组(arguments也可以varper=newPerson("武凤楼",,"魏荧屏");//输出:“武凤楼”per.say();varstu=newstudent("曹玉",);//输出:“曹玉”stu.say();vartea=newteacher("秦杰",);//输出:“秦杰”tea.say();《/script》《/body》《/html》《/SPAN》二、call和apply的用法(详细介绍js中call和apply都可以实现继承,唯一的一点参数不同,func.call(func,var,var,var)对应的apply写法为:func.apply(func,)。JS手册中对call的解释:复制代码代码如下:《SPANstyle="FONT-SIZE:px"》call方法调用一个对象的一个方法,以另一个对象替换当前对象。call()参数thisObj可选项。将被用作当前对象的对象。arg,arg,,argN可选项。将被传递方法参数序列。说明call方法可以用来代替另一个对象调用一个方法。call方法可将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象。如果没有提供thisObj参数,那么Global对象被用作thisObj。《/SPAN》说简单一点,这两函数的作用其实就是更改对象的内部指针,即改变对象的this指向的内容。这在面向对象的js编程过程中有时是很有用的。下面以apply为例,说说这两个函数在js中的重要作用。如:复制代码代码如下:《SPANstyle="FONT-SIZE:px"》functionPerson(name,age){//定义一个类this.name=name;//名字this.age=age;//年龄this.sayhello=function(){alert(this.name)};}functionPrint(){//显示类的属性this.funame="Print";this.show=function(){varmsg=;for(varkeyinthis){if(typeof(this)!="function"){msg.push(.join(""));}}alert(msg.join(""));};}functionStudent(name,age,grade,school){//学生类Person.apply(this,arguments);//比call优越的地方Print.apply(this,arguments);this.grade=grade;//年级this.school=school;//学校}varp=newPerson("卜开化",);p.sayhello();vars=newStudent("白云飞",,,"岳麓书院");s.show();s.sayhello();alert(s.funame);《/SPAN》另外,Function.apply()在提升程序性能方面有着突出的作用:我们先从Math.max()函数说起,Math.max后面可以接任意个参数,最后返回所有参数中的最大值。比如复制代码代码如下:《SPANstyle="FONT-SIZE:px"》alert(Math.max(,));//alert(Math.max(,,,,,));////但是在很多情况下,我们需要找出数组中最大的元素。vararr=;//alert(Math.max(arr));//这样却是不行的。NaN//要这样写functiongetMax(arr){vararrLen=arr.length;for(vari=,ret=arr;i《arrLen;i++){ret=Math.max(ret,arr);}returnret;}alert(getMax(arr));////换用apply,可以这样写functiongetMax(arr){returnMath.max.apply(null,arr);}alert(getMax(arr));////两段代码达到了同样的目的,但是getMax却优雅,高效,简洁得多。//再比如数组的push方法。vararr=;vararr=;//如果我们要把arr展开,然后一个一个追加到arr中去,最后让arr=//arr.push(arr)显然是不行的。因为这样做会得到//我们只能用一个循环去一个一个的push(当然也可以用arr.concat(arr),但是concat方法并不改变arr本身)vararrLen=arr.length;for(vari=;i《arrLen;i++){arr.push(arr);}//自从有了Apply,事情就变得如此简单Array.prototype.push.apply(arr,arr);//现在arr就是想要的结果《/SPAN》

  ⑸JS中,类的创建方式与函数的创建方式相同,主要区别在于一般我们创建类时,类名的首字母需要大写,同时,我们可以再类的原型上添加公共属性和方法。创建例子如下:??JS类的继承主要有种方式:原型链继承、实例继承、组合继承、原型式继承、寄生继承、寄生组合继承??创建空的子函数,再子函数的原型上执行构造函数,让子函数的原型上拥有构造函数的全部属性和方法(包括构造函数的原型上的方法和属性,继承实现方法如下:优点:.简单,子类实例既是子类的实例也是父类的实例??????.父类在原型上新增的方法和属性都能被子类获取到缺点:.传参不方便,只能再继承的时候传递参数,无法在创建子类实例的时候传入参数??????.无法实现多继承(一个子类继承多个父类??????.原型上的属性、方法被所有的实例共享??创建子类函数,在函数内部直接调用构造函数,如果构造函数有参数在这里传参,继承实现方法如下:优点:.传参方便,可以在创建实例时传参??????.可以实现多继承缺点:.无法继承父类原型上的属性和方法???????.因为原型上没有方法,所以无法实现函数复用????????同时使用构造继承和原型链继承。继承实现方法如下:优点:.综合了构造继承和原型链继承的优点,并且去除他们的缺点,总体而言是一个比较好的继承方案缺点:.因为同时使用了原型链继承和构造继承,很明显可以看出父类实例的属性被调用了两次,浪费内存????????创建一个函数传入要继承的父对象,内部创建空的子类函数,然后在子类函数外部将父对象赋值给子类函数的原型,再返回子类函数的new执行结果。继承实现方法如下:????函数内调用原型式继承,赋值给一个对象,然后可以自定义增加它的一些属性和方法。继承实现方法如下:???????通过寄生方式,去掉父类的实例属性,在调用两次父类的构造的时候,就不会初始化两次实例方法或属性,避免的组合继承的缺点,也就是重新创建一个空的函数,将父类的原型拷贝给这个空函数,然后对子类函数执行这个空函数。继承实现方法如下:优点:全身都是优点缺点:实现复杂

  ⑹js中有哪些继承方式

  ⑺继承的方式一共有三种:一、原型继承通过prototype来实现继承。functionPerson(name,age){this.name=name;this.age=age;}Person.prototype.sayHello=function(){alert(’’使用原型得到Name:’’+this.name);}varper=newPerson("马小倩",);per.sayHello();//输出:使用原型得到Name:马小倩functionStudent(){}Student.prototype=newPerson("洪如彤",);//实现原型继承varstu=newStudent();Student.prototype.grade=;Student.prototype.intr=function(){alert(this.grade);}stu.sayHello();//输出:使用原型得到Name:洪如彤stu.intr();//输出:二、构造函数实现继承functionPerson(name,age){this.name=name;this.age=age;}Person.prototype.sayHello=function(){alert(’’使用原型得到Name:’’+this.name);}varper=newPerson("马小倩",);per.sayHello();//输出:使用原型得到Name:马小倩三、通过call、apply实现继承

您可能感兴趣的文章:

相关文章