Object.__proto__ === Function.prototype // true
Function.prototype.__proto__ === Object.prototype // true
Function.prototype.a = () => {
console.log(1);
}
Object.prototype.b = () => {
console.log(2);
}
function A() {}
const a = new A();
a.a(); // 报错
a.b(); // 2
A.a(); // 1
A.b(); // 2
解析:
对于new
出来的对象 a 的属性,原型链查找的顺序应该是
- a 自身
a.__proto__
相当于 A.prototypeA.prototype.__proto__
相当于 Object.prototypeObject.prototype.__proto__
这个为 null,原型链查找到头。
对于function
定义的函数 A 的属性,原型链查找顺序应该是
- A 自身
A.__proto__
相当于 Function.prototypeFunction.prototype.__proto__
等于 Object.prototypeObject.prototype.__proto__
这个为 null,原型链查找到头。
Function.prototype.a = 'Function';
Object.prototype.a = 'Object';
function A() {}
const a = new A();
console.log(A.a); // Function
console.log(a.a); // Object
解析:
var foo = {},
F = function(){};
Object.prototype.a = 'value a';
Function.prototype.b = 'value b';
console.log(foo.a) // value a
console.log(foo.b) // undefined
console.log(F.a) // value a
console.log(F.b) // value b
解析:
- foo.a的查找路径: foo自身: 没有 —>
foo.__proto__
(Object.prototype): 找到value a - foo.b的查找路径: foo自身: 没有 —>
foo.__proto__
(Object.prototype): 没有 —>foo.__proto__.__proto__
(Object.prototype.proto): 没有 - F.a的查找路径: F自身: 没有 —>
F.__proto__
(Function.prototype): 没有 —>F.__proto__.__proto__
(Object.prototype): 找到value a - F.b的查找路径: F自身: 没有 —>
F.__proto__
(Function.prototype): 找到value b