2012-03-02 10 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」を満たしていますか?

返り値が返されている関数でチェーンコールを行う方法を知りたいですか?

+2

あなたの関数のようにそれを呼び出す - this

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

二つの関数内のメッセージを表示ANS返します連鎖を許可するために、応答メッセージまたはオブジェクト自体を返すことができます。両方を同時に返すことはできません。 – Simon

答えて

0

連鎖呼び出しのためにクラスインスタンスを返す必要があります。クラスの出力を格納できるすべてのオブジェクトの基本クラスを作成し、それを "toString"または同様の関数(多分 "出力")で返すことをお勧めします。

あなたのコードは次のようになります。

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

つだけのオブジェクトを返すことができます。

2つのオプションがあります。

一つは - インスタンスとメッセージ

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

を含むオブジェクトを返しますし、

new Person().initialize("I :").say("you ").instance.say(" & he"); 
関連する問題