欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

原型继承

程序员文章站 2022-06-15 15:51:36
...
// 先创造一个父类
function Foo(name) {
    this.name = name;
    console.log('1 ' + this.name);
}

// 通过prototype给父类添加一个方法
Foo.prototype.myName = function() {
    return this.name;
};

// 再创造一个子类
function Bar(name, label) {
    // 要点是,this 的指向不是在定义时被确定的,而是在执行环境中被确定的
    // 对于这行代码来说,在执行到这行代码的时候,function Foo() 中
    // this.name = name,this 变为 Bar 的上下文, this.name 变为 在Bar上下文中的name属性,name 为我们传入的参数
    Foo.call(this, name);
    this.label = label;
}

// 把Bar链接到Foo的原型链上,构成继承
Bar.prototype = Object.create(Foo.prototype);

// 通过prototype给子类添加一个方法
Bar.prototype.myLabel = function() {
    return this.label;
};

// 创建一个Bar对象实例
const a = new Bar('a', 'obj a');

console.log(a.myName()); // 输出'a'
console.log('2 '+ a.myLabel());// 输出 '2 obj a'

const b = new Foo('xxx');// 输出'1 xxx'
console.log('3 '+ b.myName() + '\n');// 输出'3 xxx'
console.log('4 '+ a.name);// 输出'4 a'

// 其实还有一个输出,如果真懂了的话知道在哪里
相关标签: 原型继承