原型、原型对象、构造函数、实例

示例:

function Person (name, age) {
  this.name = name;
  this.age = age;
}
var person1 = new Person('nick', 22);
var person2 = new Person('hellon', 20);

 画出下图:

 

解析:Person是构造函数,具有name,age,prototype属性,每个构造函数都有一个原型对象(prototype),Person的prototype属性指向该构造函数的原型对象(prototype)

构造函数:JS中的函数即可以是构造函数又可以当作普通函数来调用,当使用new来创建对象时,对应的函数就是构造函数,通过对象来调用时就是普通函数。

原型对象

    1.通过new构造函数可以得到实例,每个实例都有_proto_属性,实例的_proto_指向构造函数的原型对象;

    2.所有对象都有_proto_;

    3.对象的_proto_ === 构造函数的.prototype

    4.访问一个对象的属性时,如果对象有这个属性,就获取到了;如果没有这个属性,则从protp中去找,如果没有找到,则去原型对象prototype里的proto中去寻找;再找不到就去Object对象里找,找不到就为null。例如:

function Person (nick,age) {
  this.nick = nick;
  this.age = age;
}
Person.prototype.sayName = function () {
  console.log(this.nick);
}
var people = new Person();
//调用原型对象上面的方法
people.sayName();

原型对象、构造函数、实例之间的关系:

每个构造函数都有一个原型对象(prototype属性),原型对象上包含着一个指向构造函数的指针(constructor),而实例包含着一个指向原型对象的内部指针(实例._proto_ === 类.prototype)。通俗的说,实例可以通过内部指针访问到原型对象,原型对象可以通过constructor找到构造函数。

例子:

[]
function Person () {}
var child = new Person();
child.constructor;// ƒ Person(){}  实例的constructor === 构造函数

Person.prototype.constructor;// ƒ Person(){}  原型.constructor === 构造函数

child.__proto__.constructor;// ƒ Person(){}  

child.__proto__;
// {constructor: ƒ}constructor: ƒ Person()__proto__: Object    实例._proto_ === 原型

Person.prototype;// {constructor: ƒ}  构造函数.prototype === 原型

child.__proto__ === Person.prototype;// true

上述代码关系图如下:

 Object和Function的定义:

函数就是对象,代表函数的对象叫函数对象。

Function被称为构造器,其实也就是一个函数。js中所有的函数对象都是被Function这个函数对象构造出来的,所以Function是最顶层的构造函数,包括系统中所有对象、用户自定义对象、系统内置对象、以及Function自身。

Object是函数对象,所以对象都继承于Object,Object是顶层对象。

所有的函数对象都是被Function构造出来的,所以Object是被Function构造出来的。

 

Object和Function的创建过程:

 第一步:js先创建的是Object.prototype这个原型对象;

第二步:在这个原型对象的基础上创建了Function.prototype这个原型对象;

第三步:通过这个原型对象创建出来了Function这个函数;

第四步:又通过Function这个函数创建出来Object这个对象。

创建过程:Object.prototype -> Function.prototype -> Function -> Object

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值