MDN 的作者措辞还是非常严谨的,“简单替代方案”,也就是说实现类似的功能,道路将会非常曲折。 你的方法已经略显曲折了,但还是没有完全模拟出私有属性该有的样子——如果使用原型链继承的话,所有子类实例的 `.v` 属性都会指向同一个 `value`: function SubC (){} SubC.prototype = new C(); var subC1 = new SubC(); var subC2 = new SubC(); // 注意这里修改的是 subC1.v subC1.v = 10086; // 注意这里打印的是“没被修改”的 subC2.v console.log(subC2.v) // 10086 不过,这并不是你的写法有问题,而是原型链继承的固有缺陷,所以这里要被迫使用构造函数继承,这就偏离了“原型链继承”的语境限制,复杂程度也更上一层楼: function SubC1 (){ C.call(this); } SubC.prototype = new C();