手机版

JavaScript原型链和继承操作示例总结

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

本文说明了JavaScript原型链和继承操作。分享给大家参考,如下:

1. JavaScript继承

JavaScript继承可以说发生在对象之间,而原型链是实现继承的主要方法;

1.1 原型链

使用原型使一个引用类型继承另一个引用类型的属性和方法。

构造函数中有一个原型(在每个函数中),它指向它的原型对象,每个原型对象也有一个构造函数属性,它指向原始的构造函数。构造函数创建的所有新对象都有一个不可访问的[[proto]]属性,这使得对象也指向构造函数的原型。这使得对象能够获得原型中的方法和属性。

当访问对象中的属性或方法时,如果对象中没有这样的属性或方法,将在下一个更高级别的原型对象中搜索它。如果找到了,就返回,如果没有,就继续在上面的原型中搜索。

1.2 构造函数的原型链继承

函数父亲(姓名、年龄){ this.name=namethis.age=年龄;}父亲. prototype . eat=function(){//将eat方法console.log(this.name' eat ')添加到原型中;} var f1=新父亲('李思',20);//创建新对象f1,[[proto]]指向父原型functionson () {} son。原型=f1//将子构造函数的原型指向父类型的对象,这里,——继承var S1=new Son();//创建子对象S1 . eat();//李四吃了。运行结果:

注意:

:当儿子原型指向父亲时,他已经是父母类型的儿子了。

:S1 . eat();s1中没有这样的方法。此方法在父类型的原型中。当s1访问时,它现在在s1中被搜索。如果不存在,将在他指向的原型中搜索。如果它仍然不存在,它将继续在上面的原型中搜索。这样就形成了原型链。

:通过原型链实现继承。

缩写:

var f1=新父亲;Var Son.prototype=f1//可以缩写为: varson。原型=新父亲();//此时可以传值,但其他地方不能传值

1.3 默认顶端原型

默认顶级原型:

是的,当所有类型都不指示它们继承某个类型时,默认情况下它们将继承对象类型。

Objec也有原型指向他的对象原型,对象也有[[prototype]],但是他指向null;可以忽略。

物体的原型中存在许多物体的方法;

在原型链中搜索,并从当前位置向上访问原型链的顶部。

1.4 测试数据

类型的测试数据,最好只测试基本类型的数据,应该返回除基本类型以外的对象。

Console.log(类型为123)//numberconsole.log(类型为“ccsa”)//strigins tnaceof测试对象是否属于不属于其父类对象的类型

函数父(名称){}var f1=new神父();console.log(父的f1实例);//真实运行结果:

IsPrototypeOf(待测对象)是一种专门属于原型对象的方法。要判断对象是否在原型链上,请使用:父类构造函数PrototypeOf

函数父亲(){ }函数儿子(){ }儿子.原型=新父亲;var S1=new son();console.log(父辈. prototype . isprototypeof(S1));//true console . log(object . prototype . isprototypeof(S1));//true

1.5 借调

借调:借用构造函数调用假装继承,借调实现的继承不是真正的继承,只是借用构造函数中的属性或方法。

申请,打电话.

函数Fn(姓名、年龄){ this.name=namethis.age=20}功能子(姓名、年龄、性别){fn。调用(本、姓名、年龄)//借调继承fn;this.sex=sex};Var s1=新子('李思',20,'男');console . log(S1);

注意:借调的缺点:call是假继承,不是真正的继承,所以不能访问原构造函数原型中的属性或方法。

1.6 组合继承

复合构造函数借调继承和原型继承的优势:

函数Fn(姓名、年龄){ this.name=name//构造函数的属性多种多样。this.age=年龄;if((typeof Fn.prototype.eat)!=' function '){//判断语句中是否有这个方法,如果没有,创建Fn . prototype . eat=function(){//prototype方法共享console . log(this . name ' eat ');}}} functionson(姓名、年龄、性别){//创建一个子类构造函数Fn.call(this,姓名、年龄)//借用属性this.sex=性别的Fn();};son . prototype=new Fn();//Son.prototype指向父类对象并继承,所以可以调用eat方法,var s1=new Son ('Li Si ',20,'雄');//如果没有继承,子类实例s1不能简单地通过使用callsecondfn继承来调用eat方法call console . log(S1);//因为call不是真正继承的S1 . eat();注:son . prototype=new Fn();这种说法认为,儿子继承了父母的类型;子是指父类型创建的对象,父类型的对象有自己的属性,成为子类型的原型,因此其中的属性成为共享的。但是之前也用了Fn.call(),这个语句借用了父类构造函数的属性,相当于覆盖了子类型原型的属性。

更多对JavaScript相关内容感兴趣的读者可以查看本网站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》、《JavaScript数学运算用法总结》、0103010

希望本文对JavaScript编程有所帮助。

版权声明:JavaScript原型链和继承操作示例总结是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。