什么是原型链呢?其实俗话说就是:__proto__的路径
就叫原型链
题目一
var F = function() {};
Object.prototype.a = function() {
console.log('a');
};
Function.prototype.b = function() {
console.log('b');
}
var f = new F();
f.a();
f.b();
F.a();
F.b();
f的隐式原型是F().prototype,F().prototype是一个对象,因此再往上的隐式原型是Object.prototype,里面由方法.a 因此f.a() 返回 a 而f.b()找不到 f.b is not a function
F的隐式原型是function.prototype,F()的显式原型是F().prototype,先查本身,没有,向上到function.prototype,再到Object.prototype 因此F.a()返回a F.b()返回b
题目二
var A = function() {};
A.prototype.n = 1;
var b = new A();
A.prototype = {
n: 2,
m: 3
}
var c = new A();
console.log(b.n);
console.log(b.m);
console.log(c.n);
console.log(c.m);
b先查本身显式原型,没有,找b隐式原型A().prototype,再到object.prototype
b.n 1 b.m没找到undefined c.n 2 c.m 3
题目三
var foo = {},
F = function(){};
Object.prototype.a = 'value a';
Function.prototype.b = 'value b';
console.log(foo.a);
console.log(foo.b);
console.log(F.a);
console.log(F.b);
foo先找它本身,没找到,foo是对象,往上Object.prototype; F先找本身F.prototype没找到,往上F隐式原型是function().prototype,再往上Object.prototype
foo.a value a foo.b undefined F.a value a F.b value b
题目四
function A() {}
function B(a) {
this.a = a;
}
function C(a) {
if (a) {
this.a = a;
}
}
A.prototype.a = 1;
B.prototype.a = 1;
C.prototype.a = 1;
console.log(new A().a);
console.log(new B().a);
console.log(new C(2).a);
new A先找自身没找到,往上new的隐式原型是A().prototype
new B自身找到了,但括号里没东西,自身出来是undefined
new C自身直接找到2 返回
1 undefined 2
题目五
console.log(123['toString'].length + 123)
123是数字,数字本质是new Nubmer(),本身没有tostring ,往上function Number()找到toString,toString.length是1,结果124
是不是想问为什么toString.length是1,我只能说,你问的太棒了,我也不懂 附上链接自己看