创建构造函数的构造函数(JavaScript)

时间:2016-02-18 00:54:30

标签: javascript object constructor

在我正在进行的模拟中,我将有一个Element类,我将用params调用该元素的属性(熔化和沸腾温度,与其他元素反应的规则,颜色,密度等) 。)创建基本类型的元素(水,氧,碳等)。从这些,我只想从水,氧和碳模板创建新的“原子”。我想知道是否有办法使用构造函数(Element)来创建一个新的构造函数(如Water)?例如,我希望能够做到这样的事情。

var Element = function(/* params */) {
    // common element properties and basic functions
}
var Water = new Element(); // create the new element
var WaterAtom = new Water(); // create the atom (an instance of the element)
// draw the atom, manipulate it, react with other atoms, etc.

我基本上问,构造函数可以创建另一个构造函数吗?我希望这样,所以我不必创建大量的.prototype代码来扩展基本的Element类。

2 个答案:

答案 0 :(得分:1)

您可以编写一个实用程序函数来生成Element的子类:

function Element() {}

function subElement() {
  function SubElement() {}
  SubElement.prototype = Object.create(Element.prototype);
  return SubElement;
}

var Water = subElement();
var waterAtom = new Water();

答案 1 :(得分:0)

我认为你在寻找的是

function Element(…) {
    // init properties that all elements share
}
Element.prototype.… = function(…) { … }; // add all methods of elements

Element.makeType = function(rules) {
    function ElementType(…) {
        Element.call(this, …);
    }
    ElementType.prototype = Object.create(Element.prototype);
    ElementType.prototype.constructor = ElementType;
    ElementType.prototype.rules = rules;
    return ElementType;
};

以便您可以像

一样使用它
var Water = Element.makeType(function(…) {
    // do whatever makes water special
});

var drop = new Water(…);