gpt4 book ai didi

javascript - 如何创建与其他对象类型相同的新对象

转载 作者:行者123 更新时间:2023-11-30 05:39:22 25 4
gpt4 key购买 nike

假设您在 javascript 中有一个对象层次结构,其中“A”是父类(super class),“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;

最佳答案

如果你仔细restore constructors (就像你已经在你的例子中所做的那样)你可以调用'new this.constructor()':

function A () {
this.label = 'A';
}

A.prototype = {
constructor: A,
quux: function () {
return new this.constructor(/*ctor args here*/);
}
};

function B () {
this.label = 'B';
}

B.prototype = new A();
B.prototype.constructor = B;

function C () {
this.label = 'C';
}

C.prototype = new A();
C.prototype.constructor = C;

console.log(new A().quux().label); // prints A
console.log(new B().quux().label); // prints B
console.log(new C().quux().label); // prints C

关于javascript - 如何创建与其他对象类型相同的新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21642534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com