欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-08 15:58:02
...

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

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.。
实际上沿着隐式原型链找的
JavaScript高级-----显式原型属性、隐式原型属性、原型对象

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

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

JavaScript高级-----显式原型属性、隐式原型属性、原型对象
有些混乱,想起来了继续弄明白
画个图,一下子清楚了
JavaScript高级-----显式原型属性、隐式原型属性、原型对象

相关标签: javascript高级