function inherit(p){
if(p == null) throw TypeError(); //p是一个对象, 但不能是null
if(Object.create) //如果Object.create()存在
return Object.create(p); //直接使用它
var t = typeof p; //否则进一步检测
if(t !== "Object" && t !== "function" ) throw TypeError();
function f() {}; //定义一个空构造函数
f.prototype = p; //使用f()创建p的继承对象
return new f();
}
var o = {}; //o 从 Object.prototype 继承对象的方法
o.x = 1; //给o定义一个属性x
var p = inherit(o); //p继承o和Object.prototype
p.y = 2; //给p定义属性y
var q = inherit(p); //q继承p, o 和Object.prototype
q.z = 3; //给q定义一个属性z
var s = q.toString();
console.log(s);
var z = q.x + q.y; //q.x 访问奶奶o的x属性 q.x = 1, q.y访问了妈妈p的属性y. q.y = 2 所以结果为3
console.log(z);
console.log(o.y); //undefined 妈妈o不能访问儿子p的属性y
/*
个人理解:
p继承了o, o是p的妈妈, p是儿子.
o.x可以set o的属性x.
p.x可以get o的属性x.
p.y也可以set 自己的属性y
o.y妈妈不能get儿子的属性y
*/