关于Js原型与原型链

Js原型与原型链

JavaScript 中,万物皆对象!凡是通过 new Function() 创建的对象都是函数对象,其他的都是普通对象。

在 JavaScript 中,每当定义一个对象时,对象中都会包含一些预定义的属性。其中每个函数对象都有一个prototype 属性,这个属性指向函数的原型对象

 

在上述示例中,原型对象就是 Person.prototype 我们给原型对象添加了四个属性:name、age、job、sayName。其实它还有一个默认的属性:constructor

person1和 person2都是Person的实例,person1 和 person2其实并没有constructor 这个属性,这个属性是属于Person的原型对象的,只是person1 和 person2可以继承原型对象的constructor这个属性。

所有的原型对象都会自动获得一个 constructor(构造函数)属性,这个属性(是一个指针)指向 prototype 属性所在的函数(Person)

Person.prototype.constructor == Person

每个对象都有 __proto__ 属性,但只有函数对象才有 prototype 属性

function Person(){};

console.log(Person.prototype) //Person{}

console.log(typeof Person.prototype) //Object

console.log(typeof Function.prototype) // Function,Function.prototype是函数对象

console.log(typeof Object.prototype) // Object

console.log(typeof Function.prototype.prototype) //undefined

 

所有对象的 __proto__ 都指向创建它的构造函数的原型对象xx.prototype
对象 person1 有一个 __proto__属性,创建它的构造函数是 Person,构造函数的原型对象是 Person.prototype ,所以:
person1.__proto__ == Person.prototype

特殊:

Object.prototype.__proto__ === null

Object.prototype 对象也有proto属性,但它比较特殊,为 null 。因为 null 处于原型链的顶端,这个只能记住。

所有函数对象的proto都指向Function.prototype,它是一个空函数(Empty function)

Function.prototype也是唯一一个typeof XXX.prototype为 function的prototype

 

普通对象的__proto__指向这个对象(this)的构造函数的prototype;

函数对象的__proto__全部都是指向Function的prototype。

 

无论是Function的prototype还是构造函数的prototype都指向object.prototype,然后最终object.prototype指向null

 

 

实例(tidy)和 原型对象(dog.prototype)存在一个连接。不过,要明确的真正重要的一点就是,这个连接存在于实例(tidy)与构造函数的原型对象(dog.prototype)之间,而不是存在于实例(tidy)与构造函数(dog)之间。

 

实例继承原型对象的属性和方法,与构造函数无关,功能上讲prototype是给别人用的东西,而且给别人的东西自己不能用,__proto__是借用别人的东西。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值