伪古典继承

它是使用原型继承来模拟经典继承 ,它展示了原型的强大程度。它的目的是使语言对来自其他语言的程序员更具吸引力。

Version < 6

重要说明 :由于语言模拟了传统的类, 因此 ES6 使用伪 calssical 继承是没有意义的。如果你不使用 ES6,你应该 。如果你仍然想使用经典继承模式并且你处于 ECMAScript 5 或更低版本的环境中,那么伪经典是你最好的选择。

class 只是一个用 new 操作数调用的函数,它被用作构造函数。

function Foo(id, name) {
    this.id = id;
    this.name = name;
}

var foo = new Foo(1, 'foo');
console.log(foo.id);

控制台输出

1

foo 是 Foo 的一个实例。JavaScript 编码约定说如果函数以大写字母开头,它可以被称为构造函数(使用 new 操作数)。

要向添加属性或方法,你必须将它们添加到它的原型中,该原型可以在构造函数的 prototype 属性中找到。

Foo.prototype.bar = 'bar';
console.log(foo.bar);

控制台输出

bar

事实上,Foo 作为构造函数所做的只是使用 Foo.prototype 创建对象,因为它是原型。

你可以在每个对象上找到对其构造函数的引用

console.log(foo.constructor);

function Foo(id, name){…

console.log({ }.constructor);

function Object(){[native code]}

并且还使用 instanceof 运算符检查对象是否是给定类的实例

console.log(foo instanceof Foo);

真正

console.log(foo instaceof Object);

真正