如何在JavaScript中使用函数的别名与new一起使用

时间:2015-02-27 13:05:19

标签: javascript

说我有

function Person(birthDate){ // parameter accepting is unknown to the alias maker
    this.birthDate = birthDate;    
    this.getAge = function() {
      return new Date().getFullYear() - this.birthDate.getFullYear();
    };
};

我只是将函数名称'Person'给了某个人,他不知道Person可以接受多少个参数,并要求他为Person做别名

该别名应与Person

的工作方式相同
var dave = new Alias_Person(new Date(1909, 1, 1)); // here number of parameters is unknown
dave.getAge(); //returns 100.

什么应该是别名?

请注意,别名应该有自己的功能,而不仅仅是Person的引用

目前我这样做,

var Alias_Person = function(){
    return Person.apply(null, arguments);
  };

但这并没有带来正确的结果。

编辑:我的最终目标是摆脱与Date一起使用的'new'。简单地使用Date()总是会导致当前的日期和时间。我想要这样的东西

My_Date({parameters})返回与“new Date({parameters})

相同的结果

1 个答案:

答案 0 :(得分:3)

您可以执行var Alias_Person = Person

如果由于某种原因确实需要使用其他函数,则需要重新分配原型,以便两个构造函数都使用相同的对象进行继承。

function Alias_Person() {
    return Person.apply(this, arguments);
//                      ^^^^ also don't forget to pass the instance
}
Alias_Person.prototype = Person.prototype;

如果您不关心Alias_Person是否new被调用,只想返回Person个实例,请查看Use of .apply() with 'new' operator. Is this possible?,这可能导致像

这样的东西
function Alias_Person() {
    var inst = Object.create(Person.prototype);
    return Person.apply(inst, arguments) || inst;
}
相关问题