关于javascript中对象继承的问题

问题在大犀牛那本书里的第125页,在讲解给对象属性赋值的时候有一句话说,“假设给对象o的属性x赋值,如果o中不存在属性x,那么赋值操作给o添加一个新属性x。如果之前o继承自属性x,那么这个继承的属性就被新创建的同名属性覆盖了”,这话我不光没能理解,实验也没能实现出来。。。
我写的测试代码如下:
AAA = {p:{x:1}};
BBB = inherit(AAA.p);
inherit()是继承的函数,书前面有提到,是正确无误的。上面的BBB继承自AAA的属性p,而且BBB中不存在属性p。
alert(BBB.x); //这里是1,正确
alert(BBB.p);//这里是undefined,正确
BBB.p = "a"; //现在给BBB的p属性赋值"a",BBB不包含p属性,所以给BBB添加了新属性p,并且赋值为"a";
alert(BBB.p); //a,正确
现在该怎么理解书上最后这句“那么这个继承的属性就被新创建的同名属性覆盖了”?实在是不能理解啊

你是继承AAA.p对象,p对象是{x:1},BBB当然没有p,你要有p应该是inherit(AAA)

js的继承是指定义function对象时候,function对象有一个prototype的属性,这个属性是这个对象所属的原型,如果你把这个原型指向另一个function对象实例,则意味着这个对象的父类是新对象的实例。例子如下:

// 定义基类A
function A(){
    this.f1 = function(){
        WScript.Echo("A.f1");
    }
}
// 定义派生类B
function B(){
    this.f2 = function(){
        WScript.Echo("B.f1");
    }
}
// 设置派生类的原型为A
B.prototype = new A();

// 实例化派生类
var b = new B();

// 调用派生类的f1()函数,实际在派生类中不存在,因此会从原型A类中找到f1()函数,并输出A.f1()
b.f1();

// 如果把B中的this.f2改成this.f1,则调用b.f1()时候,就会自动调用B中的f1函数,并输出B.f1()
b.f1()