面试官:讲讲实例与原型
花花绿绿世界里,柴米油盐酱醋茶。
今天我们就来继续昨天的内容继续讲述关于实例与原型。
我们读取一个实例对象的属性,如果找不到,就会查找与实例对象关联的原型中的属性,如果还查不到,就去找原型的原型,一直找到最顶层为止。这样一个查找过程。
举个例子
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 的时候,结果自然为 公众号-人生代码。
描述
但是当我们删除了 person 的 name 属性后,再次读取 person.name,从 person 对象中找不到 name 属性就会从 person 的原型也就是 person.proto ,也就是 Person.prototype中查找,幸运的是我们找到了 name 属性,结果为 Ken
总结
- 尝试遍历
实例a中的所有属性,但没有找到目标属性; - 查找
name属性的这个请求被委托给该实例a的构造器(A)的原型,它被a.__proto__记录着并且指向A.prototype; A.prototype存在目标属性,返回他的值;
但是万一还没有找到呢?原型的原型又是什么呢?
明天揭晓