我正在深入研究Javascript,并学习构造函数方法的工作原理。
在下面的代码中,我希望我能够覆盖对象的构造函数,以便新创建的实例将使用新的构造函数。但是,我似乎无法使新实例使用新的构造函数。
非常感谢任何有关正在发生的事情的见解!
function constructorQuestion() {
alert("this is the original constructor");
};
c = new constructorQuestion();
constructorQuestion.constructor = function() { alert("new constructor");}
howComeConstructorHasNotChanged = new constructorQuestion();
答案 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;