javascript为所有函数添加原型方法?

时间:2010-01-24 11:33:15

标签: javascript

有没有办法在不使用原型库的情况下为所有javascript函数添加方法?

类似于:

Function.prototype.methodName = function(){ 


  return dowhateverto(this) 

 };

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

如果可以,我可以将它添加到我选择的一组功能中

类似的东西:

MyFunctions.prototype.methodName = function(){ 


  return dowhateverto(this) 

 };

其中MyFunctions是一个函数名称数组

谢谢

4 个答案:

答案 0 :(得分:27)

不确定。函数是对象:

var foo = function() {};

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

foo.bar();

会提醒“bar”

答案 1 :(得分: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

答案 2 :(得分:1)

尝试使用Object.prototype:

Object.prototype.methodName = function(){ 

  return dowhateverto(this) 
};

但也注意到扩展原生物体并不总是一个好主意的警告。

在Javascript中无法真正可靠地操作Function.prototype;它不是一个真正的对象,因为Function()构造函数需要返回一个函数,而不是一个对象。但是,你也不能把它当成正常的功能。当您尝试访问其“属性”时,它的行为可能是未定义的,因浏览器而异。另请参阅this question

答案 3 :(得分:0)

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