gpt4 book ai didi

javascript - 在javascript中动态实例化类

转载 作者:行者123 更新时间:2023-12-03 07:09:34 25 4
gpt4 key购买 nike

我查看了这个reference link最终使用了 Matthew 的解决方案,因为它对我有用。

var factory ={};
factory.Tree = function(arg1,arg2,arg3,arg4){
console.log(arg1+""+arg2+""+arg3+""+arg4);
}
function instantiate(classname){
return new (function(a){ return factory[classname].apply(this,a);})(Array.prototype.splice.call(arguments,1));
// also is this ^^^ a good practice? instead of declaring the temp function beforehand
// function t(a) {return factory[classname].apply(this,a);}
// return new t(Array.prototype.splice.call(arguments,1));
}
var newObj = instantiate("Tree",1,2,3,4); // this prints 1234 --> works

不过,我不确定为什么使用 user123444555621 的解决方案只有在我传入“参数”(即包括“类名”的所有内容)时才有效:

function instantiate(classname){
return new (Function.prototype.bind.apply(factory[classname], arguments));
}
var newObj = instantiate("Tree",1,2,3,4); // this prints 1234 --> works

但是如果我切片“参数”并删除“类名”,然后传入结果数组,它不会按预期工作:

function instantiate(classname){
var args = Array.prototype.splice.call(arguments,1);
// ^^ I checked and this prints 1,2,3,4 as well
return new (Function.prototype.bind.apply(factory[classname], args));
}
var newObj = instantiate("Tree",1,2,3,4); // this prints 234undefined

我不知道为什么,但不知何故,args 数组似乎被切片(再次)并删除了它的第一个元素(在本例中为 1)。

有人可以提供任何见解吗?谢谢

最佳答案

你使用了正确的数组函数吗slice vs splice

Array.prototype.slice() - Creates a new array from elements of an existing array. It does not modify the original array.

Array.prototype.splice() – Deletes and/or inserts elements in an array. Unlike slice(), the splice() method modifies the original arrayand returns a new array. The splice() method takes three arguments.

关于javascript - 在javascript中动态实例化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36661315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com