JavaScript高级-----显式原型属性、隐式原型属性、原型对象

其实我还没搞明白,先记录下来。

1.所有的实例对象都有隐式原型属性。

2.每一个函数function都有一个prototype显示原型属性。
3.对象的隐式原型的值为其对应构造函数的显式原型的值。
4.函数的prototype属性: 在定义函数时自动添加的, 默认值是一个空Object对象。
5.对象的proto属性: 创建对象时自动添加的, 默认值为构造函数的prototype属性值。
6.function Foo{}等于var Foo = new Function()所以有隐式原型属性,即所有函数都有隐式和显示原型属性。
7.所有函数的隐式原型都相等,都是new Function产生的。
8.function Function()既有显示原型属性也具有隐式原型属性且相同,说明Function=new Function。
9.function Object()的隐式原型等于function Function的显示原型,进一步说明每个函数都是Function的实例(包括他本身)。
10.函数的显示原型指向的对象, 默认是空的Object实例对象,单Object不满足。
11.所有的函数本质上都是Function()的实例,所以我们定义的函数可以看作为:var fun = new Function(){},所以我们定义的函数也有__proto__(即隐式原型属性),均指向Function的prototype属性(显式原型属性,但是Function.prototype又是Object.prototype的实例)1.所以函数的显式原型指向的对象默认是空的Object实例对象,除了Object函数自身例外。2.所有函数都是*Function的实例(包括Function自身)。然后fun自己还有自己的prototype属性,一开始prototype属性的值是一个堆内存的空的对象地址,可以向其中加入属性。如果有实例比如 var p1 = new fun{},那么p1的__proto__值自动被赋值为fun的prototype属性的值。总的来说就是因为jsp没有类,为了实现一些类似继承的功能来的,这样实例就可以用上一级的显式原型里的属性,隐式原型属性始终是个地址值。

注:Function的显示原型也是Object的实例
11.3.Object原型对象是原型链的尽头,因为Object.proto 是null.。
实际上沿着隐式原型链找的
在这里插入图片描述

//创建一个构造函数
function person(name){
    this.name=name
}
//创建一个构造函数的实例
var person1=new person;

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
有些混乱,想起来了继续弄明白
画个图,一下子清楚了
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值