2015-05-19 54 views
0

如何直接在字符串上調用一個函數?在一個字符串上調用函數(Javascript)

var test = function(x){ 
    console.log(x); 
}; 

test(); 

** 上述日誌 '未定義',它應。

如果我嘗試:

"test".test(); 

我得到:

"error" 
"TypeError: \"test\".test is not a function. 

但測試的函數。所以,即使我嘗試:

var example = "test"; 

example.test(); 

我得到:

"error" 
"TypeError: example.test is not a function 

任何幫助是極大的讚賞。

+2

這是一個函數,但它與任意字符串的連接是什麼? JS如何知道一個字符串確實有這個名字的函數? – zerkms

+0

要清楚:如果您嘗試將參數傳遞給用戶定義的函數,請參閱Thilo的答案。如果你正在尋找爲'String'對象添加一個方法,然後用'String'類型值調用該方法,請參閱Luke的答案。 –

+0

是的,'test'(全局變量)是一個函數,但是'example.test'或''test「.test'(字符串屬性)不是,就像你的錯誤消息狀態一樣。 – Bergi

回答

3

輸出中test爲了擴大對其他的答案了一下,你已經創建了一個名爲test()功能,但該功能不屬於任何對象,它不屬於任何字符串。您還沒有爲字符串定義一個名爲test()的函數,因此是錯誤。

要做到這一點,你可以嘗試以下方法:

String.prototype.test = function() { 
    console.log(this); 
}; 
"hello".test(); 

對原型閱讀起來here。本質上,JavaScript中的對象具有屬性和方法,並且它們也具有其原型的屬性和方法。

+0

'.test()'是[RegExp'對象的方法](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test) –

+0

確實,雖然這是我的理解,OP只是亂搞功能。我可能不正確? – Luke

+0

我不認爲你對OP的評估不正確,但我只是指出了這一點,因爲你說「..不屬於任何物體」 –

1

是的,test是一個函數,但String.prototype.test不是函數。值爲undefined,使用調用操作符調用undefined值會拋出TypeError

1

的問題是有點不清楚,但如果你試圖傳遞一個字符串作爲參數傳遞給函數,這將

test("hello"); 

var example = "hello"; 
test(example); 
+0

我很清楚:他問如何調用原型函數或方法。 – Xufox

+1

不太確定。可能只是關於如何使用參數調用函數的基本問題。它看起來應該將'x'參數設置爲所討論的字符串。在統一調用語法的語言中,'a.test()'與'test(a)'或'test a'相同。 – Thilo

0

,你必須在字符串定義功能test()首先使用Prototypes

例如:

String.prototype.cleanSpaces = function() { 
    return this.replace(" ", ''); 
}; 

現在你可以調用"test ".cleanSpaces()

0

使用prototype

String.prototype.test = function() { 
    console.log(this.toString()); 
} 

'test'.test(); 

,將在控制檯

相關問題