如何更改对象的构造函数?

时间:2013-06-19 14:24:47

标签: javascript object constructor

我正在深入研究Javascript,并学习构造函数方法的工作原理。

在下面的代码中,我希望我能够覆盖对象的构造函数,以便新创建的实例将使用新的构造函数。但是,我似乎无法使新实例使用新的构造函数。

非常感谢任何有关正在发生的事情的见解!

function constructorQuestion() {
    alert("this is the original constructor");
};

c = new constructorQuestion();
constructorQuestion.constructor = function() { alert("new constructor");}
howComeConstructorHasNotChanged = new constructorQuestion();

这是小提琴:http://jsfiddle.net/hammerbrostime/6nxSW/1/

2 个答案:

答案 0 :(得分:6)

constructor是函数prototype的属性,而不是函数本身。做:

constructorQuestion.prototype.constructor = function() {
    alert("new constructor");
}

有关详细信息,请参阅:https://stackoverflow.com/a/8096017/783743


BTW,如果您希望代码howComeConstructorHasNotChanged = new constructorQuestion();提醒"new constructor"不会发生。这是因为你没有调用新的构造函数,而是调用旧构造函数。你想要的是:

howComeConstructorHasNotChanged = new constructorQuestion.prototype.constructor;

更改constructor属性不会神奇地更改构造函数。

你真正想要的是:

function constructorQuestion() {
    alert("this is the original constructor");
};

c = new constructorQuestion();

function newConstructor() {
    alert("new constructor");
}

newConstructor.prototype = constructorQuestion.prototype;

howComeConstructorHasNotChanged = new newConstructor();

这会奏效。请参阅:http://jsfiddle.net/GMFLv/1/

答案 1 :(得分:1)

我认为使用相同的原型创建新对象是相同的:

function newClass(){
    alert('new class with same prototype');
}

newClass.prototype = constructorQuestion.prototype;