




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第实例详解JavaScript构造函数和原型缺点:存在内存浪费的问题,
如果有俩对象或者更多就会对一个复杂数据类型进行空间的多次开辟
构造函数原型prototype原型对象主要解决了内存浪费的问题构造函数通过原型分配的函数是所有对象所共享的。在JavaScript里每一个构造函数都有一个prototype属性,指向另一个对象。这个prototype就是一个对象,prototype这个对象的所有属性和方法,都会被构造函数所拥有。这时候就可以使用prototype把方法放到里面供该对象所有的实例对象使用。
对象原型_proto_对象
对象都会有一个属性_proto_指向构造函数的prototype原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性和方法,就是因为对象有_proto_原型的存在。
sy的_proto_和sym的_proto_是一样的方法的查找规则:首先先看sy,sym对象身上是否有sing方法,如果有就执行这个对象上的sing,因为存在__proto__,就去构造函数原型对象Prototype的存在,就去构造函数原型对象Prototype身上去查找sing这个方法(简单来说就是,我自己有就使用,没有就去原型对象里找)函数和对象创建时会自动创建一个属性他两指向同一个空对象
1.2constructor构造函数构造器构造函数
对象原型(_proto_)和构造函数(prototype)原型对象里面都有一个属性constructor属性,constructor我们称为构造函数,因为它指回构造函数本身。
他们俩里面都有constructor如果prototype里面以对象的形式添加,那么就是prototype指向变了,指向了一个新的原型对象,这个新对象里没有指向construor,需要自己手动指向一下
2.原型链
2.1js中成员查找规则
当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性。如果没有就查找它的原型(也就是._proto_指向的prototype原型对象)。如果还没有就查找原型对象的原型(Object的原型对象)。依此类推一直找到Object为止(null)。
2.2原型对象this指向
1.在构造函数中,里面this指向的是对象实例shanyu
script
functionPerson(uname,uage){
this.uname=uname;
this.uage=uage;
//声明一个变量然后验证this指向是不是和实例化对象相同
varthat;
Ptotype.skill=function(){
console.log(我会吃饭
that=this;
varshanyu=newPerson(山鱼,30);
shanyu.skill();
console.log(that===shanyu);
/script
2.3扩展内置对象
可以通过原型对象,对原来的内置对象进行扩展自定义的方法.
script
//自定义对象应用,给Array添加一个自定义方法
Atotype.sum=function(){
varsum=0;
for(vari=0;ithis.length;i++){
sum+=this[i];
returnsum;
vararr=[1,2,3,4];
console.log(arr.sum());
/script
数组和字符串内置对象不能给原型对象覆盖操作Atotype={}如果进行该操作就会使本来有的方法被覆盖掉,只能是Atotype.方法名=function(){}的方式。
3.call作用
调用这个函数,并且修改函数运行时的this指向,有三个参数分别是thisArg当前调用函数this的指向对象arg1,arg2传递的其他参数
script
functionsing(x,y){
console.log(a~a~给我已被忘情水
console.log(this);
console.log(x+y);
varfn={
name:山鱼
//call()可以改变这个函数的this指向此时这个函数的this就指向了o这个对象
sing.call(fn,1,2)
/script
通过我们打的可以看到this的指向为Son,也就是Son使用了父构造函数里面的,uname,uage
4.1利用原型对象继承
es6之前并没有extends所以可以使用构造函数和模型对象结合的方式来进行继承操作
script
functionFather(uname,uage){
this.uname=uname;
this.uage=uage;
Ftotype.eat=function(){
console.log(我爱吃鸡腿
//子构造函数
Stotype=newFather();
Stotype.constructor=Son;
functionSon(uname,uage,swing){
Father.call(this,uname,uage);
this.swing=swing;
Stotype.student=function(){
console.log(我爱学习!!
//要向使用父亲原型对象里面的方法,可以实例化一下Father,然后
//这时候Son的this指向到了Father,所以我们要用constructor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论