You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
在这个例子中,我们给实例对象 person 添加了 name 属性,当我们打印 person.name 的时候,结果自然为 kebi。
但是当我们删除了 person 的 name 属性时,读取 person.name,从 person 对象中找不到 name 属性就会从 person 的原型也就是 person.__proto__,也就是 Person.prototype 中查找 (原型对象中),幸运的是我们找到了 name 属性,结果为 heyushuo。
一.什么是原型呢?
我们创建每一个函数都有一个 prototype(原型)属性,这个属性是一个指针,指向一个对象.(即 prototype 即为函数的原型该原型指向的是一个原型对象)
二.什么是原型对象呢?
可以由特定类型的所有 实例 共享的属性和方法.(字面意思 prototype 就是通过调用构造函数而创建的实例对象的原型对象)
三.原型对象和原型的关系?
1.proto是什么呢?
2. constructor 是什么呢?
通过一张图片和代码展示他们之间的关系
3.总结一下 prototype 和
__proto__
到底是什么关系呢?__proto__
属性, 可以称之为隐式原型属性(简称: 隐式原型)__proto__
属性指向的对象四.什么是原型链?
1.原型的搜索机制
在这个例子中,我们给实例对象 person 添加了 name 属性,当我们打印 person.name 的时候,结果自然为 kebi。
但是当我们删除了 person 的 name 属性时,读取 person.name,从 person 对象中找不到 name 属性就会从 person 的原型也就是 person.
__proto__
,也就是 Person.prototype 中查找 (原型对象中),幸运的是我们找到了 name 属性,结果为 heyushuo。但是万一还没有找到呢?原型的原型又是什么呢? ( 肯定需要一环一环地前行到原型链的末端才会停下来)
2.最顶层为默认的原型
所有的函数的默认原型都是 Object 的实例,所以默认原型都会包含一个内部指针,指向 Object.prototype(默认原型的原型对象),这也真是所有自定义类型都会继承 toString()/valueOf 等默认的方法的根本原因.一直查到最顶层才算一个完整的原型链
如图所示: 蓝色线为完整的原型链
The text was updated successfully, but these errors were encountered: