原型,原型链
2020-04-17 16:25:24 0 举报
AI智能生成
javascript 原型-原型链使用及原理
作者其他创作
大纲/内容
注意事项:
proto和constructor属性是对象所独有的
person1.proto == person1的构造函数.prototype
prototype属性是函数所独有的
但是由于JS中函数也是一种对象
所以函数也拥有proto和constructor属性
理解:
proto属性:
prototype属性:
作用:
它的作用就是包含可以由特定类型的所有实例共享的属性和方法
也就是让该函数所实例化的对象们都可以找到公用的属性和方法
结论:
由此可知:f1.proto === Foo.prototype,它们两个完全一样
constructor属性:
可以看出Function这个对象比较特殊,它的构造函数就是它自己(因为Function可以看成是一个函数,也可以是一个对象)
作用:
它是从一个对象指向一个函数,含义就是指向该对象的构造函数
结论:
所有函数最终都是由Function()构造函数得来,所以constructor属性的终点就是Function()
总结:
proto属性来连接对象直到null的一条链即为我们所谓的原型链。
原型链和proto有关系,和prototype没关系
原型链和proto有关系,和prototype没关系
proto和constructor属性是对象所独有的
prototype属性是函数所独有的,因为函数也是一种对象
所以函数也拥有proto和constructor属性
prototype属性的作用就是让该函数所实例化的对象们都可以找到公用的属性和方法
即f1.proto === Foo.prototype
constructor属性的含义就是指向该对象的构造函数,所有函数(此时看成对象了)
最终的构造函数都指向Function()
首先得明白
Javascript数据类型
基本数据类型:
例如:
Number String Boolean Null Undefined
按值访问可以直接操作保存在变量中的实际值
事例:
引用类型数据:
例如:
Object 、Array 、Function 等
不可以直接访问堆内存空间中的位置和操作堆内存空间,
只能操作对象在栈内存中的引用地址
只能操作对象在栈内存中的引用地址
事例:
JavaScript 中对象
普通对象
函数对象
例如:
Object 、Function 是 自带的函数对象
需注意:Object也是函数
凡是通过 new Function() 创建的对象都是函数对象
javascript构造函数
person1 和 person2 都是 Person 的实例
Person为构造函数
实例对象
这两个实例都有一个 constructor (构造函数)属性,该属性(是一个指针)指向 Person
事例:
结论:
person1.constructor == Person
实例的构造函数属性(constructor)指向构造函数。
原型对象
例如:
Person.prototype
作用:
主要是为了实现继承和共享属性
说明:
每个函数对象都有一个prototype 属性,这个属性指向函数的原型对象(一个普通对象)
结论:
每个对象都有 proto 属性,但只有函数对象才有 prototype 属性
原型对象就是 Person.prototype
Person.prototype.constructor == Person
它也有一个默认的属性:constructor(构造函数属性)
这个属性(是一个指针)指向 prototype 属性所在的函数(Person)
原型对象(Person.prototype)是 构造函数(Person)的一个实例
proto
说明:
JS 在创建对象(普通对象、函数对象)的时候
对象都有proto 的内置属性,用于指向创建它的构造函数的原型对象
分析:
对象 person1 有一个 proto属性
创建它的构造函数是 Person
构造函数的原型对象是 Person.prototype
结论:
作用:
当访问一个对象的属性,如该对象内部不存在这个属性,那么就会去它的proto属性所指向的那个对象(可以理解为父对象)里找
如果父对象也不存在这个属性,则继续往父对象的proto属性所指向的那个对象(可以理解为爷爷对象)里找
如果还没找到,则继续往上找….直到原型链顶端null(可以理解为原始人。。。)
此时若还没找到,则返回undefined(可以理解为,再往上就已经不是“人”的范畴了,找不到了,到此为止)
0 条评论
下一页