Javascript 原型函数的动态函数调用
我必须在一个函数中进行一系列Javascript 原型函数的动态函数调用,javascript,Javascript,我必须在一个函数中进行一系列.prototype声明,并希望添加一些动态性来减少代码的大小 以下是我需要执行的一些伪代码: window.myClass = function(){ var object_type = getObjectType(); if (object_type === 'NodeList') { NodeList.prototype.func_name = function(){ //some code } }
.prototype
声明,并希望添加一些动态性来减少代码的大小
以下是我需要执行的一些伪代码:
window.myClass = function(){
var object_type = getObjectType();
if (object_type === 'NodeList')
{
NodeList.prototype.func_name = function(){
//some code
}
}
if (object_type === 'HTMLCollection')
{
HTMLCollection.prototype.func_name = function(){
//the same code again
}
}
}
我想改变这一点,这样我可以使这些声明动态化,有点像这样:
window.myClass = function(){
var object_type = getObjectType();
object_type.prototype.func_name = function(){
//some code
}
}
这可能吗
编辑
我忘了提到我希望将所有函数都保留在
窗口的范围内。myClass
在您的情况下,您只需执行
window[object_type].prototype[func_name] = function(){...
但要小心,你似乎正在参与。您的应用程序可能有更好的设计。无需详细说明您想要实现什么,或者这是一个好主意还是有更好的方法,只需根据发布的代码,您所需要做的就是将“某些代码”定义为功能,并将其分配给您想要的任何对象:
window.myClass = function(){
function someCode() { /* some code */ }
var object_type = getObjectType();
if (object_type === 'NodeList')
{
NodeList.prototype.func_name = someCode;
}
if (object_type === 'HTMLCollection')
{
HTMLCollection.prototype.func_name = someCode;
}
}
但是你并不真的需要if语句,因为你可以这样做
window.myClass = function(){
function someCode() { /* some code */ }
var object_type = getObjectType();
window[object_type].prototype.func_name = someCode;
}
您可能应该在其他地方定义这些函数,然后在if条件
if(object_type==='HTMLCollection'){HTMLCollection.prototype.func_name=yourFunction;}
-这将大大提高可读性。“dynamism”指的是使用变量?谢谢。我不希望将作用域与初始对象断开。我不确定这是否可行。谢谢你。我对扩展window对象感到不舒服(正如您的第二个代码块所建议的)。有没有一种方法可以对原始对象范围内的对象使用相同的括号表示法,例如[object\u type].prototype.func\u name
?您没有扩展窗口对象。您正在将一个函数添加到窗口对象上已存在的某个对象的原型中。这是否意味着代码已被封装,并且没有任何冲突的可能性?如果其他人将相同的方法添加到同一DOM类的原型中,则有可能发生冲突。