宝哥软件园

js继承方法概述(原型、调用、应用)(推荐)

编辑:宝哥软件园 来源:互联网 时间:2021-08-25

js的原型-原型继承

让我先谈谈什么是前型。

在js中,俗话说“万物皆物”。所有新出来的都是函数对象;否则,普通对象、函数对象都有原型对象。普通对象只有__proto__(原型指针)函数对象的一个特点:可以在不同的类之间实现方法,函数的子类可以共享父类的方法,而父类不能想创建父类函数对象functionpersonal (name,age) {this。name=子类方法eg:的名称(原型继承)//;//父类的私有财产是this.age=ageThis.house=['北京','上海']}个人。原型。run=function(){//将方法alert动态添加到父类的原型中(' prototype method:' this.name '正在运行!');} var per=new Personal('小白',24) per.run() //print-prototype方法:小白正在运行!//创建子类函数对象functionboy(){ } boy . prototype=new personal('小黑',19) //子类继承父类Boy.prototype.source=100 //添加原型属性boy . prototype . print source=function(){//printsounce,将方法alert(this.name ',添加到子类的原型方法,打印得分为' this '。来源'//打印分数100} Boy.prototype.run() //打印-原型方法:小黑在跑!Varboys=newboy () boys。printsource () console.log (boys,'-boys-')//print-19,小黑,100(这里,Personal的属性会沿着原型向上找到)。关于原型继承,应该注意以下几点:

1.如果父类中有引用类型的属性:数组、对象等。子类继承这些属性并试图改变它们,这将影响父类的属性。

//创建另一个实例1:varboys 1=new boy(). boys 1 . house . push(' Shenzhen ')//打印这两个实例:console.log (boys,boys 1)

可以看出,当属性为引用类型时,只要操作一个实例的属性,所有实例都会受到影响。

2.这个方法导致Boy.prototype.constructor被重写,它指向Personal而不是Boy。因此,您需要手动将Boy.prototype.constructor指向Boy。

boy . prototype=new Personal();boy . prototype . constructor===Personal;//true//重写Boy.prototype中的构造函数属性,指向自己的构造函数boy boy . prototype . constructor=boy;3.因为boy . prototype=new Personal();覆盖Boy的原型对象,所以在重写原型对象之前会覆盖printSource,所以在子类中添加原型方法必须在替换原型之后(如不覆盖)。

函数Boy(){ } Boy . prototype=new Personal();//给子类添加原型的方法必须是boy . prototype . print source=function(){ console . log(' print source ~ ')替换原型后;};4.创建boys实例时,不能将参数传递给父类的构造函数,也就是说,不能初始化source属性。因此,您只能在创建实例后修改父类的属性。

const boys=new Boy();//创建实例后只能修改父类的boys.source=100属性;apply()和call()方法的继承

了解apply(),call()方法

1.1.apply()的用法,调用():

obj.call(thisObj,arg1,arg2,);obj.apply(thisObj,[arg1,arg2,]);Obj是父母,thisObj是孩子;第二个参数apply可以接收一个数组,而call只能逐个接收每个项目。

2.apply和call的诞生是为了扩展函数的范围,换句话说,它们的存在是为了改变函数的方向。

3.当一个对象没有某个方法,但是有其他方法时,我们调用使用其他对象的方法来操作,或者传递参数。

//eg:function Personal(姓名、性别){ this.name=namethis.sex=sexthis . say=function(){ alert(' name:' this . name ';性别:‘这个。sex)} } const per=new personal(' Allan ',' male ')per . say();//apply()方法实现:函数girls(姓名、性别){personal。适用(此,[姓名、性别]);//Person.apply(这个,参数);//效果同上一句,引数//打印。应用(这个,参数);//也可以继承多个父类,但原型原型只能继承一个父类!记住} const girls1=new Girls('露西','女')Girls 1 . say();//call()实现:functionboy(姓名、性别){personal。称呼(这个、名字、性别);} const boys=new Boy('Barry ','男');Boys.say() //总结:

Prototype可以动态地向对象添加属性和方法。子类可以继承父类,并且拥有父类的属性和方法。调用和应用的区别在于参数不同。Call和apply被理解为在子类的运行环境中执行父类的方法和属性。Call和apply可以实现一个子类继承多个父类,但是prototype只能有一个父类。以上是边肖介绍的js继承方法的总结。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!

更多资讯
游戏推荐
更多+