我有很多代码块,如下所示:
.....
var headerEl = document.createElement("div");
headerEl.id = "headerDiv";
document.body.appendChild(headerEl);
var headerBlock = new Header(headerEl);
var footerEl = document.createElement("div");
footerEl.id = "footerDiv";
document.body.appendChild(footerEl);
var footerBlock = new Footer(footerEl);
.....
现在我想创建一个将执行上述代码的函数“createBlock”,所以我只需要传递这样的参数
.....
var headerBlock = createBlock("headerDiv", Header);
var footerBlock = createBlock("footerDiv", Footer);
.....
我试过这个但是没有用
function createBlock (divName, className){
var myDiv = document.createElement("div")
myDiv.id = divName;
document.body.appendChild(myDiv);
var block = new className(myDiv);
return block;
}
答案 0 :(得分:1)
使用应用调用模式或Function.prototype.call
:
function createBlock (divName, className){
var myDiv = document.createElement("div")
myDiv.id = divName;
document.body.appendChild(myDiv);
var block = className.call(null, myDiv);
return block;
}
通过检查Header
Footer
和this
都是范围安全的
function Header(arg) {
if(this instanceof Header) {
//initialise
return this;
}
else {
return new Header(arg);
}
}
答案 1 :(得分:0)
function createBlock (divName, className){
var myDiv = document.createElement("div")
myDiv.id = divName;
document.body.appendChild(myDiv);
var block = new window[className](myDiv);
return block;
}
var headerBlock = createBlock("headerDiv", "Header");
var footerBlock = createBlock("footerDiv", "Footer");
请注意"Header"
和"Footer"
答案 2 :(得分:-1)
请参阅Dynamically loading a typescript class (reflection for typescript)
您需要使用:
var newInstance = Object.create(window[className].prototype);
newInstance.constructor.apply(newinstance, params);