第一道:
function A() {
}
A.prototype.n = 1
var b = new A()
A.prototype = {
n: 2,
m: 3,
}
var c = new A()
console.log(b.n, b.m, c.n, c.m)
题目分析:下面图中画出了上面程序执行时,变量在内存中的状态,A.prototype最后改变了指向,但实例b仍然指向原来的地址,该地址没有存放m所以b.m为undefined。
第二道:
function Foo() {
Object.prototype.a = function () {
console.log('可访问a')
}
}
Function.prototype.b = function () {
console.log('可访问b')
}
var foo = new Foo()
foo.a();//'可访问a'
foo.b();//报错
Foo.a();//'可访问a'
Foo.b();//'可访问b'
上图清晰的标注了a与b存放的位置,通过原型链,严格按照线所指的方向能到达a或b就是可访问的。