面试官:讲讲实例与原型

649 阅读1分钟

面试官:讲讲实例与原型

花花绿绿世界里,柴米油盐酱醋茶。

今天我们就来继续昨天的内容继续讲述关于实例与原型。

我们读取一个实例对象的属性,如果找不到,就会查找与实例对象关联的原型中的属性,如果还查不到,就去找原型的原型,一直找到最顶层为止。这样一个查找过程。

举个例子

function Person() {}
Person.prototype.name = 'Ken';

var person = new Person();
person.name = '公众号-人生代码';

console.log(person.name) // 公众号-人生代码

delete person.name;
console.log(person.name) // Ken

在这个例子中,我们给实例对象 person 添加了 name 属性,当我们打印 person.name 的时候,结果自然为 公众号-人生代码

描述

但是当我们删除了 personname 属性后,再次读取 person.name,从 person 对象中找不到 name 属性就会从 person 的原型也就是 person.proto ,也就是 Person.prototype中查找,幸运的是我们找到了 name 属性,结果为 Ken

总结

  • 尝试遍历实例a中的所有属性,但没有找到目标属性;
  • 查找name属性的这个请求被委托给该实例a构造器(A)的原型,它被a.__proto__ 记录着并且指向A.prototype
  • A.prototype存在目标属性,返回他的值;

但是万一还没有找到呢?原型的原型又是什么呢?

明天揭晓