2
假設您在JavaScript中具有對象層次結構,其中「A」是超類,並且「B」和「C」都從它繼承。 「A」中有一些方法想要創建並返回實際上是任何類型對象的新實例。因此,如果在類型爲「B」的對象上調用對象「A」中的這些方法之一,則應該創建類型爲「B」的新對象並將其返回,但顯然對象「A」不知道任何關於「B」(而不應該)。如何創建與某些其他對象相同類型的新對象
那麼,如何創建與某個其他對象類型相同的對象,而不管它是什麼類型(如invert
方法所示)?
代碼示例:
function A() {
// constructor logic here
}
A.prototype = {
invert: function() {
// question: how do I create an object here that is the same
// type as whatever this object is (could be A, B or C)
}
};
// -------------------------
// B - subclass of A
function B() {
// call A superclass constructor
A.apply(this, arguments);
}
B.prototype = new A();
B.prototype.constructor = B;
// methods of B
B.prototype.negate = function() {
// method of subclass
}
// -------------------------
// C - subclass of A
function C() {
// call A superclass constructor
A.apply(this, arguments);
}
C.prototype = new A();
C.prototype.constructor = C;