2012-12-24 35 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

相關問題