2010-01-24 75 views
15

有没有方法可以在不使用原型库的情况下为所有javascript函数添加方法?javascript将原型方法添加到所有函数中?

东西沿着线:

Function.prototype.methodName = function(){ 


    return dowhateverto(this) 

}; 

这是我试过到目前为止,但它没有工作。也许这是一个坏主意,如果可以,请告诉我为什么?

如果是的话我可以把它添加到一组函数我选择

类似:

MyFunctions.prototype.methodName = function(){ 


    return dowhateverto(this) 

}; 

其中MyFunctions是函数名的数组

谢谢

+0

http://www.packtpub.com/article/using-prototype-property-in-javascript – jjj 2010-01-24 11:39:23

+1

扩展内置的JavaScript对象是不好的做法。 – jerone 2010-01-24 12:14:28

回答

25

当然。函数是对象:

var foo = function() {}; 

Function.prototype.bar = function() { 
    alert("bar"); 
}; 

foo.bar(); 

会提醒“酒吧”

+0

这段代码假设'foo'已经被声明过了,否则'foo'是一个隐含的全局变量(bad!)。也许把声明语句改成'var foo = function(){};'以强化好的练习......? – 2010-04-18 07:19:32

+0

那么,首先修改基础对象的原型并不完美。但我同意。 – troelskn 2010-04-18 16:26:40

1
function one(){ 
    alert(1); 
} 
function two(){ 
    alert(2); 
} 

var myFunctionNames = ["one", "two"]; 

for(var i=0; i<myFunctionNames.length; i++) { 
    // reference the window object, 
    // since the functions 'one' and 'two are in global scope 
    Function.prototype[myFunctionNames[i]] = window[myFunctionNames[i]]; 
} 


function foo(){} 

foo.two(); // will alert 2 
1

更改JS内置对象可以给你一些惊喜。
如果您添加外部库或更改其中一个的版本,则您不能确定它们不会覆盖您的扩展。

+0

您的链接已死亡。 – luckydonald 2015-11-02 13:35:27

+0

@luckydonald,感谢您的评论 – Mic 2015-11-02 15:25:24

1

尝试Object.prototype中,而不是:

Object.prototype.methodName = function(){ 

    return dowhateverto(this) 
}; 

但也听从警告,扩展本地对象并不总是一个好主意。

Function.prototype不能在Javascript中可靠地操作;它不是一个真正的对象,因为Function()构造函数需要返回一个函数,而不是一个对象。但是,你不能像正常的功能那样对待它。当您尝试访问其“属性”时,其行为可能未定义,并且在浏览器之间有所不同。另见this question

相关问题