2012-03-02 77 views
0
var Person = function(){}; 


function klass() { 
    initialize = function(name) { 
      // Protected variables 
      var _myProtectedMember = 'just a test'; 

      this.getProtectedMember = function() { 
      return _myProtectedMember; 
      } 

      this.name = name; 
       return this; 
     }; 
    say = function (message) {     
      return this.name + ': ' + message + this.getProtectedMember(); 
      // how to use "return this" in here,in order to mark the code no error. 
     }; 
//console.log(this); 

return { 
       constructor:klass, 
     initialize : initialize, 
     say: say 
    } 
    //return this; 
} 

Person.prototype = new klass(); 
//console.log(Person.prototype); 
new Person().initialize("I :").say("you ").say(" & he"); 

如何在「say」中使用「return this」,以便標記代碼沒有錯誤。Javascript「return this」符合「return」?

我想知道如何在已經返回alrealy的函數中「連鎖調用」?

+2

你的功能可以返回響應消息或對象本身以允許鏈接。它不能同時返回。 – Simon 2012-03-02 10:57:08

回答

0

您需要返回一個類實例來鏈式調用。我建議你爲所有可以存儲類的輸出的對象創建一個基類,並將它返回到「toString」或類似的函數中,也許是「輸出」。然後

您的代碼變成:可以返回

(new Person()).initialize("I :").say("you ").say(" & he").toString(); 
0

只有一個對象。

所以你有兩個選擇。

一個 - 顯示消息的函數內部ANS返回this

say = function (message) {     
    // show the message here e.g. using an alert  
    alert(this.name + ': ' + message + this.getProtectedMember()); 
    // then return instance 
    return this; 
}; 

兩個 - 返回包含實例和消息

say = function (message) { 
    message = this.name + ': ' + message + this.getProtectedMember();    
    return {message:message, instance:this}; 
}; 

一個對象,然後調用它像

new Person().initialize("I :").say("you ").instance.say(" & he");