2012-12-24 13 views
1

我想请教一下下面function.prototype.method

Function.prototype.method = function (name, func) { 
    this.prototype[name] = func; 
    return this; 
}; 

代码是否意味着,“功能”和任何新的功能将通过继承方法创建的功能呢?

为了更清楚

Function.method('test', function() {return 1;}); 

现在可以被称为对功能的方法或其他任何功能或不考?

回答

0

JavaScript是一种典型的语言。当一个对象调用一个函数而没有找到时,搜索就开始了原型链。它将搜索原型链中的所有对象,直到原型链终止于所有对象的父亲Object

所有函数都会直接或间接地继承Function,这意味着所有函数都会有您指定的“方法”,甚至是已经创建的函数。


Function.prototype.printSup = function() { console.log('sup'); } 
Math.max.printSup(); 
String.pringSup(); 
'asdf'.substr.printSup() 
+1

所有对象的父对象!除了Internet Explorer 8及更早版本中的DOM节点外,您知道*因为*。 – Ryan

+0

尝试使用上面附加的代码来定义函数。以这种方式定义一个函数后,我无法在函数的原型或任何其他函数上找到它。它只在该函数创建的对象中可用,我不知道为什么?! –

+0

@MostafaMahmoud我不明白,我更新了我的答案,包括例子。 –

2

不,this在函数内部指的是在它被调用的对象。在这种情况下,这应该是一个函数,更具体地说,是一个构造函数。它应该像下面这样使用:

function SomeObject() {} 

SomeObject.method('doSomething', function() { 
    alert('Something!'); 
}); 

new SomeObject().doSomething(); // Something! 
+0

尝试使用上面附加的代码来定义函数。通过这种方式定义函数后,我无法在函数的原型或任何其他函数上找到它。它只在该函数创建的对象中可用,我不知道为什么?! –

+0

@MostafaMahmoud:啊,对不起,我误读'this'作为'Function'。它应该用于构造函数。请参阅编辑。 – Ryan

相关问题