从javascript中的一个实例继承

Inheritance from one instance in javascript

本文关键字:一个 实例 继承 javascript      更新时间:2023-09-26

我想知道是否有可能有这样的东西:

  • 基本类A
  • 派生类B1从类a的一个实例a(即a = new A())
  • 派生类B1
  • a 的相同实例a 派生类B2

我举个例子:

var a = new A();
function A() {
    this.var_test = 0;
    this.test = function () {
        alert(this.var_test++);
    }
}
function B1() {
}
B1.prototype = a;
function B2() {         
}
B2.prototype = a;
var b1 = new B1();
var b2 = new B2();
b1.test(); // i want alert(0)
b2.test(); // i want alert(1)

怎么做?

当然,只要使用标准的继承方法:

console.clear();
function A() {
  this.test = function() {
    alert(A.var_test++);
  }
  A.var_test = 0;
}
var a = new A();
b1 = Object.create(a);
b2 = Object.create(a);
b1.test();
b2.test();
b1.test();
b2.test();

以下是Douglas Crockford关于JavaScript经典继承的一些推荐阅读:http://javascript.crockford.com/inheritance.html

他说得很简洁:

JavaScript是一种无类的、面向对象的语言,因此,它使用原型继承而不是经典继承。这可能会让接受过传统面向对象语言(如c++和Java)培训的程序员感到困惑。JavaScript的原型继承比经典继承更有表现力[…]