当前位置:硬件测评 > js原型链与继承解析(初体验)[javascript]

js原型链与继承解析(初体验)[javascript]

  • 发布:2023-09-29 15:30

web前端|js教程
js原型链、javascript、继承
网络前端- js教程
图片轮播源码,vscode运行js简单代码,ubuntu 500g,关于tomcat真题,查sqlite锁,用什么软件学网页设计,服务器需要注册吗,od插件api 、前端登录框架排名、爬虫js、php strtr、seo优化设计、购物车springboot、smartsite智能网站、爱心页源码、html5详情页模板、新网登录网站后台、ecshop产品页显示促销时间、php网站后台管理系统后缀、小程序登录源码lzw
云购买源码无法增加购买数量、在vscode中运行asm文件、极五笔ubuntu、tomcat加载原理、sqlite csdn、动态网页设计与制作操作、dede如何删除数据库中不必要的文件、高效服务器代理、wordpress视频插件、tora前端框架、爬虫网页、php描述、seo领域、springboot阅读量、智能标签调用栏目介绍、网站推广任务、网页聊天群、bootstrap网站模板组件、phpcms后台管理模板、html知乎登录页面代码、人事管理系统源码百度云、小程序群模块源码lzw
首先定义一个对象obj,该对象的原型为obj。 _proto_,我们可以使用ES5中的getPrototypeOf方法来查询obj的原型,我们通过判断obj的原型是否等于Object.prototype来证明是否存在obj的原型。答案返回true,所以存在。然后我们定义一个函数 foo()。任何函数都有它的原型对象,即函数的原型。我们可以在函数的原型上添加任意属性,然后实例化的对象就可以通过new来共享它的属性(下面会详细介绍两个例子)。
简易教师资源管理系统源码v2.0,ubuntu下创建目录,tomcat8关闭日志,爬虫原理实例,php输出版,杭州seo博客搜索器SEOlzw
功能o(){}foo.prototype.z = 3;var obj = new foo();obj.x=1;obj.y=2;obj.x //1obj.y //2obj.z //3typeof obj .toString; //functionobj.valueOf(); // foo {x: 1, y: 2, z: 3}obj.hasOwnProperty('z'); //false
这里,obj(_proto_)的原型指向foo函数的prototype属性,foo.prototype的原型指向Object.prototype,原型链末尾为null。使用 hasOwnProperty 检查 z 属性是否在 obj 上。如果显示为 false,则 obj 上没有 z 属性,但是通过查找其原型链,我们发现 foo.prototype 上存在它,因此 obj.z=3,而对于第一个示例,obj.valueOf() 和toString都是在Object.prototype上的,所以任何对象都具有这两个属性,因为任何对象的原型都是Object.prototype。当然,除了下面这种特殊情况,

var obj2 = Object.create(null);obj2.valueOf(); //未定义
对象。 create()创建一个空对象,这个对象的原型指向参数。下面的综合示例向您展示如何实现一个类继承另一个类

//声明一个构造函数Personfunction Person(name,age){ www.sychzs.cn = name; this.age = Age;}Person.prototype.hi = function (){ console.log('嗨,我的名字是 ' + www.sychzs.cn +',我的年龄是 '+this.age);};Person.prototype .LEGS_NUM=2;Person.prototype.ARMS_NUM=2;Person.prototype.walk = function (){ console.log( www.sychzs.cn+'正在行走!');};function Student(姓名,年龄,classNum){ Person .call(这个,姓名,年龄); this.classNum = classNum;}//创建一个空对象 Student.prototype = Object.create(Person.prototype);//构造函数指定创建对象的函数。 Student.prototype.constructor = Student;Student.prototype.hi = function (){ console.log('嗨,我的名字是 ' + www.sychzs.cn +',我的年龄是 '+this.age+' 我的班级是 ' +this.classNum);};Student.prototype.learns = function (sub){ console.log(www.sychzs.cn+'正在学习'+sub);};//实例化一个对象 Bosnvar Bosn = new Student('bosn ' ,27,'第三类');Bosn.hi(); //嗨,我的名字是bosn,我的年龄是27,我的班级是Class 3Bosn.LEGS_NUM; //2Bosn.walk(); //bosn 正在行走!Bosn.learns('MatH'); //bosn正在学习Math
构造函数Person和Student的this指向实例化对象(Bosn),这个对象的原型指向构造函数的原型。

我们使用 Object.create() 方法创建一个空对象。这个对象的原型是Person.prototype。这样写的好处是我们可以自己创建Studnet,而不影响Person.prototype属性。 .prototype的任何属性,都可以继承Person.prototype原有的属性,因为子类Student继承了基类Person。如果直接写Person.prototype = Student.prototype,那么它们都指向同一个对象。当向Student.prototype添加属性时,相同的属性将被添加到Person的原型链中。

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

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

对于继承,有三种实现方式,

function Person(姓名,年龄){ www.sychzs.cn = 姓名; this.age = 年龄;}function Student(){}Student.prototype = Person.prototype; //1Student.prototype = Object.create(Person.prototype); //2Student.prototype = new Person(); //3

发表于未分类 | 带标签的js原型链

相关文章

最新资讯