手机版

js原型链和继承分析(第一次体验)

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

首先,我们定义一个对象obj,它的原型是obj。_原型_。我们可以在ES5中使用getPrototypeOf来查询obj的原型。我们通过判断obj是否等于Object来证明它的原型是否存在。然后我们定义一个函数foo(),每个函数都有它的原型对象,也就是函数的原型。我们可以向函数的原型添加任意属性,然后实例化的对象可以通过new共享其属性(下面将详细介绍两个例子)。

function foo(){ } foo . prototype . z=3;var obj=new foo();obj . x=1;obj . y=2;obj . x//1 obj . y//2 obj . z//3 typeof obj . tostring;//functionobj . valueof();//foo {x: 1,y: 2,z : 3 } obj . hasown property(' z ');//假

这里obj的原型(_ prototype _)指向foo函数的原型属性,foo.prototype的原型指向Object.prototype,原型链的末端为空。通过hasOwnProperty检查z属性是否在obj上,如果显示false,则obj上没有z属性,但是通过搜索它的原型链,在foo.prototype上找到它,所以obj.z=3,而obj.valueOf()和toString在Object.prototype上对于第一种情况,所以任何对象都有这两个属性,因为任何对象的原型都是object.prototype,除了下面的特殊情况,

var obj2=Object.create(空);obj 2 . Valueof();//undefinedObject.create()为创建一个空对象,该对象的原型指向参数。下面的综合示例显示了如何实现一个类来继承另一个类。

//声明一个构造函数的人(姓名、年龄){this。name=namethis.age=年龄;} person . prototype . Hi=function(){ console . log(' Hi,我叫' this.name ',我的年龄是' this . age ');};person . prototype . legs _ NUM=2;person . prototype . arms _ NUM=2;person . prototype . walk=function(){ console . log(this . name '正在行走!);};函数Student(姓名、年龄、班级编号){ Person.call(this,姓名、年龄);this . class num=class num;}//创建一个空对象student . prototype=object . create(person . prototype);//构造函数指定创建对象的函数。学生.原型.构造者=学生;student . prototype . Hi=function(){ console . log(' Hi,我的名字是' this.name ',我的年龄是' this.age ',我的班级是' this . class num ');};student . prototype . learning=function(sub){ console . log(this . name ' is learning ' sub);};//实例化一个对象bosnvar bosn=new student ('bosn ',27,' class 3 ');bosn . hi();//嗨,我的名字叫博森,我的年龄是27岁,我的班级是3班博森。LEGS _ NUM//2 bosn . walk();//bosn在走!博森学习(“数学”);//bosn正在学习数学

这个构造函数Person和Student指向实例化的对象(Bosn),这个对象的原型指向构造函数的原型。

我们使用Object.create()方法创建一个空对象,其原型是Person.prototype,这样写的好处是可以在不影响Person.prototype属性的情况下创建Studnet.prototype的任何属性,并且可以继承Person.prototype的原始属性,因为子类Student继承了基类Person。如果你写的是人。原型=学生。原型直接,然后他同时指向一个对象。向学生添加属性时。prototype,您还将向person的原型链添加相同的属性。

对于构造函数Student中的call方法,它指向新创建的Student的实例化对象,通过调用实现继承。

学生。prototype.constructor=student,这句话的意思是把student指定为创建对象Student.prototype的函数,如果不写这句话,对象的函数仍然会是Person。

实现继承有三种方式。

函数人(姓名、年龄){ this.name=namethis.age=年龄;}函数学生(){ }学生。原型=人。原型;//1名学生。原型=对象。创造(人。原型);//2学生。prototype=new Person();//3以上这篇射流研究…原型链与继承解析(初体验)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

版权声明:js原型链和继承分析(第一次体验)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。