JS笔记

来源:互联网 发布:ubuntu打开共享文件夹 编辑:程序博客网 时间:2024/06/08 17:06

js中prototype和constructor是非常重要和比较难理解的概念,下面通过示例来讲解一下prototype和constructor
我们在定义函数的时候,函数定义的时候函数本身就会默认有一个prototype的属性,而我们如果用new 运算符来生成一个对象的时候就没有prototype属性。我们来看一个例子,来说明这个

function Person(name){      this.name=name;      this.showMe=function(){         alert(this.name);      }  };  Person.test = function(){    alert("test");}Person.prototype.from=function(){      alert('from');  }   var one=new Person('js');    one.showMe();//js   ---调用构造函数本身的方法,可以正常调用one.test();// undefined  --- test属性属于构造函数本身,one是构造函数的示例对象无法访问构造函数的test方法one.constructor.test();//test  -- one对象构造函数为内置原型对象为构造函数prototype 属性引用的那个原型对象的构造函数,可以访问该构造函数的test方法one.from();//from  ---one对象的内置原型对象为构造函数prototype 属性引用的那个原型对象,调用原型对象的from方法

按照《悟透javascript》书中说的,new形式创建对象的过程实际上可以分为三步:
第一步是建立一个新对象(叫A吧);
第二步将该对象(A)内置的原型对象设置为构造函数(就是Person)prototype 属性引用的那个原型对象;
第三步就是将该对象(A)作为this 参数调用构造函数(就是Person),完成成员设置等初始化工作。
其中第二步中出现了一个新名词就是内置的原型对象,注意这个新名词跟prototype对象不是一回事,为了区别我叫它inobj,inobj就指向了函数Person的prototype对象。在person的prototype对象中出现的任何属性或者函数都可以在one对象中直接使用,这个就是javascript中的原型继承了。

原创粉丝点击