Object.prototype.a = "a1";
Function.prototype.a = "a2";
function Person(){}
let person = new Person();
console.log(person.a); // 1
console.log(Person.a); // 2
console.log(person.__proto__.__proto__.constructor); // 3
console.log(person.__proto__.__proto__.constructor.constructor); // 4
基础知识:
- prototype: 存在于构造函数的身上,指向构造函数对应的原型对象。所有通过该函数构造的实例将继承这个原型对象的属性和方法。
- __ proto__: 存在于普通对象的身上,指向该对象原型链上一层的原型对象。
- constructor: 存在于原型对象上,指向该原型对象的构造函数。
题目答案:
输出:
a1
a2
[Function Object]
[Function Function]
解析:
- Object.prototype.a = "a1"; // 此处Object为
构造函数,想想new Object(),普通对象可以通过原型链找到a1 - Function.prototype.a = "a2"; // 此处Function为
构造函数,函数对象可以通过原型链找到a2 - let person = new Person(); // person为
实例对象 - person.__ proto__.__ proto__.constructor
== Person.prototype.__ proto__.constructor
== Object.prototype.constructor
== Object