麻烦老师解答,标识的地方代码的含义,还有属性的继承
function People(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
this.arr = [1, 2, 3];
}
People.prototype.sayHello = function () {
console.log("你好,我是" + this.name);
};
function Student(name, age, sex, school, stuNum) {
People.call(this, name, age, sex);
this.school = school;
this.stuNum = stuNum;
}
function Bread(color, name) {
this.color = color;
this.name = name;
}
//原型链继承,继承于同一个people
var xh = new Student("小明", 20, "女", "清华大学", 1002);
xh.__proto__ = new People(); //-->这里
console.log(xh.color, xh.name);
xh.sayHello();
xh.__proto__ = new Bread("红色", "面包"); //-->这里
console.log(xh.color);
console.log(xh.name);13
收起
正在回答 回答被采纳积分+1
1回答
好帮手慕星星
2022-12-10 16:14:48
同学你好,解答如下:
1、可以先看构造继承的结果

实例对象xh的原型指向Student构造函数,也就是xh.__proto__的结果是Student构造函数

2、接下来改变实例原型指向为People实例

可以看到xh对象原型不再是Student构造函数,为People实例

现在xh对象中没有color属性,输出值为undefined。name会先找实例上的,结果为‘小明’。
3、接下来改变实例原型指向为Bread实例

原型指向会被覆盖为Bread实例,没有People实例了

输出color值为‘红色’,输出name值实例上的值“小明”(如果实例上没有name属性才会输出原型上的值‘面包’)。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星