这道js题帮我解释一下吧。详细一点。加分 谢谢

functionParent(){this.a=1;this.b=[1,2,this.a];this.c={demo:5};this.show=function(){co... function Parent() { this.a = 1; this.b = [1,2,this.a]; this.c = {demo:5}; this.show = function() { console.log(this.a, this.b, this.c.demo); } } function Child() { this.a = 2; this.change = function() { this.b.push(this.a); this.a = this.b.length; this.c.demo = this.a++; } } Child.prototype = new Parent(); var parent = new Parent(); var child1 = new Child(); var child2 = new Child(); child1.a = 11; child2.a = 12; parent.show(); child1.show(); child2.show(); child1.change(); child2.change(); parent.show(); child1.show(); child2.show();结果如下 展开
 我来答
匿名用户
2017-08-14
展开全部
// 定义一个父类Parent
function Parent() {
    // 设置该类的属性a、b、c,方法show
    // 数值型a
    this.a = 1;
    // 数组型b
    this.b = [1, 2, this.a];
    // 对象型c
    this.c = {
        demo: 5
    };
    // 函数型show,输出该类有意义的内容
    this.show = function() {
        console.log(this.a, this.b, this.c.demo);
    }
}

// 定义一个类Child
function Child() {
    // 定义该类的属性a
    // 覆盖父类的属性a
    this.a = 2;
    // change函数,用于改变父类的属性值
    this.change = function() {
        // 改变父类的b属性值,添加当前a=2这个值
        this.b.push(this.a);
        // 再次改变a为父类数组b的长度
        this.a = this.b.length;
        // 改变父类c的demo值为b的长度
        // 累加在后,使用累加之前的值
        this.c.demo = this.a++;
    }
}
// 继承父类Parent
Child.prototype = new Parent();
// 初始化一个Parent类的对象parent
var parent = new Parent();
// 初始化2个Child类的对象
var child1 = new Child();
var child2 = new Child();
// 设置它们各自的属性
child1.a = 11;
child2.a = 12;
// 打印parent的属性信息
parent.show();
// 子类调用父类方法show
child1.show();
child2.show();
// 子类调用自身方法change
child1.change();
child2.change();
// 再次显示,看看到底有何变化
parent.show();
child1.show();
child2.show();


// 打印parent的属性信息
// parent.show();
// 单纯的设置,没有问题
1 [1, 2, 1] 5


// child1.a = 11;
// child1.show();
11 [1, 2, 1] 5


// child2.a = 12;
// child2.show();
12 [1, 2, 1] 5


// parent.show();
1 [1, 2, 1] 5


// child1.change();
// child2.change();
// 5就是数组b的长度
5 [1, 2, 1, 11, 12] 5



// 在child1的基础上继续添加
// this.a累加之后变成6,其他不变
6 [1, 2, 1, 11, 12] 5
追问

还有两个小问题再帮看下吧

每次运行show都会运行Parent构造函数,b里的this.a为什么不是11一直是1。是因为11覆盖的是Child()里的a吧。哎呀懵逼了......

突然明白了 a = b++;是先赋值给a然后b自己+1。这样c就是5了。可是既然指向的同一个内存堆,a的值为什么两次不一样呢?不应该是都是6吗(最后一次结果)

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式