JS 的面向对象不是「类继承」而是「原型委托」:每个对象都有一个内部原型指针,访问属性时先找自身,找不到就沿原型链向上找,直到 Object.prototype(尽头是 null)。多个对象共享的方法就放在原型上,省内存又能统一修改。
class 语法是原型机制的糖:class 声明的方法实际挂在原型上,extends 继承操作的是原型链。理解这一点,才能看懂 instanceof、hasOwnProperty、以及「为什么改内置原型是危险的」。
function Animal(name) { this.name = name; } Animal.prototype.speak = function () { return this.name + ' makes a sound'; }; const dog = new Animal('Rex'); dog.speak(); // Rex makes a sound Object.getPrototypeOf(dog) === Animal.prototype; // true