2012-07-27 63 views
0

我創建了一個附加到其他函數的函數。以兩種不同的方式使用函數

像:

string("Hi").capitilize()//returns hi 

我希望能夠以兩種不同的方式使用$$字符串。 1將其附加到功能。第二個是單獨的功能:

string("Hi") 

這是假設只是返回嗨。但是,所有我得到的是:[object Object]

的主要代碼,讓我做的第一個,要重視功能是:

var g = function (a) { 
     this._string = typeof a == "string" ? a : a.toString(); 
     return a; 
} 
var string = function (a) { 
      return new g(a); 
} 

然後,我有另外一個變量,在它所有的功能然後將其與原型綁定。

是否有可能使這只是返回字符串,如果我只是有字符串(「你好」),並仍然允許函數工作,如果你添加它們?

+0

這段代碼應該只是一個例子嗎?因爲已經有一個類似於你所擁有的'String()'函數。 – Pointy 2012-07-27 21:59:24

+0

是的只是一個例子,我的實際功能有點不同(名字明智) – Shawn31313 2012-07-27 22:03:50

回答

1

基本問題是一個函數無法知道它返回的值是在哪裏。您的函數調用在.運算符被評估之前已結束,因此您的代碼在此時不會發生任何事情。

現在,你可以做的就是返回一個在其原型上有toString()實現的對象,以便當你的對象被用作一個字符串時,它將被適當地轉換。

var g = function (a) { 
     this._string = typeof a == "string" ? a : a.toString(); 
     return a; 
} 
g.prototype.toString = function() { 
    return this._string; 
} 
var string = function (a) { 
      return new g(a); 
} 
alert(new string("Hi")); 
+0

我知道,但必須有一種方法可以做到我想要的。 :/ – Shawn31313 2012-07-27 22:04:45

+1

@ Shawn31313雖然我確信艾奇先生對所有讓你快樂的事情都非常努力,他只是人,他可能錯過了一些東西。 – Pointy 2012-07-27 22:05:45

+0

@ Shawn31313你知道你不能做你想做的事,但是一定有辦法做你想做的事嗎? – 2012-07-28 00:00:08

相關問題