我有一个js代码如下,
function findDealerByIdResponse() {
findDealerByIdResponse.prototype = findDealerByIdResponseType;
this.getPrefix = function(){
return "tns1";
};
this.getNS = function(){
return "http://www.hp.com/bookservice";
};
}
function findDealerByIdResponseType(){
var DEALER ;
this.getPrefix = function(){
return "tns1";
};
this.getNS = function(){
return "http://www.hp.com/bookservice";
};
}
function getName( obj ) {
var funcNameRegex = /function (.{1,})\(/;
var results = new Object();
results = (funcNameRegex).exec((obj).constructor.toString());
return (results && results.length > 1) ? results[1] : "";
};
function test(){
var req = new findDealerByIdResponse();
alert(getName(req));
}
但如果我第一次执行“测试”它会给出我所期望的:“doTransactionType”。但后来它给了“功能”。请解释原因。
由于
迪帕克
答案 0 :(得分:0)
第一次调用findDealerByIdResponse
后,将其prototype
属性设置为一个函数,即findDealerByIdResponseType
。因此,.constructor
将被此赋值覆盖,它将解析为该函数的构造函数 - 就像任何函数Function
一样。
相反,你想要这个:
// set prototype to a parent instance
findDealerByIdResponse.prototype = new findDealerByIdResponseType;
// restore .constructor
findDealerByIdResponse.prototype.constructor = findDealerByIdResponse;
你想把它放在两个函数的声明之后。