有没有办法在不使用原型库的情况下为所有javascript函数添加方法?
类似于:
Function.prototype.methodName = function(){
return dowhateverto(this)
};
这是我到目前为止所尝试的但它没有用。也许这也是一个坏主意,如果可以,请告诉我为什么?
如果可以,我可以将它添加到我选择的一组功能中
类似的东西:
MyFunctions.prototype.methodName = function(){
return dowhateverto(this)
};
其中MyFunctions是一个函数名称数组
谢谢
答案 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内置对象可以给你一些惊喜 如果您添加外部库或更改其中一个库的版本,则无法确定它们是否会覆盖您的扩展程序。