2017-04-15 33 views
1

私は次のコードを持っている:関数内から関数を呼び出しますか?

var A = function (id) { 
    var elem = document.getElementById(id); 
    function text() { 
     return "Hello world"; 
    } 
    this.other = function(){ 
     console.log(text()); 
    } 
} 

私は外からother機能を追加しても、このようなテキスト()関数を呼び出すしたい場合はどう:

(function(A){ 
    A.prototype.other = function() { 
     console.log(text()); 
    } 
})(A); 

を行うにはどのような方法がありますがそれ?私はあなたがまだオブジェクトであるtext()方法Aの機能を添付して、このようなA.prototype.otherでそれを使用することができますfunction text(){}

+0

** **あなたが '関数のテキストを(){}' 'this.text =関数に(){}変更したくないのはなぜ'? – phihag

+0

私はそれを上書きしたくありません。 'var a = new A(); a.text = function(){} ' – IchHabsDrauf

+0

あなたの質問は本当に「名前を上書きしないようにするにはどうすればいいのですか」と言うべきでしょう。なぜ[プロパティ](https://developer.mozilla.org/en/docs/ Web/JavaScript/Reference/Global_Objects/Object/defineProperty)は十分ではありません。また、他のライブラリの名前を最初からランダムに上書きするコードを含めるかどうかを検討してください。 – phihag

答えて

1

this.text=function(){}に変更することなく、意味します。

var A = function(id) { 
 
    this.id = id; 
 
} 
 
A.text = function() { 
 
    return "Hello world"; 
 
} 
 
A.prototype.other = function() { 
 
    return this.id + ' ' + A.text(); 
 
} 
 

 
var a = new A(123); 
 
console.log(a.other())

+0

私は 'a = new A(" canvas_id ");'これを作るとうまくいけば、これはおそらく解決策になります。私はできますか? – IchHabsDrauf

+0

そして '' canvas_id "'とは何ですか? –

+0

あなたは私に 'var a = new A'を書いたので、もしあなたがそうであれば、あなたはコンストラクタにパラメータを渡していなければ、' A() 'を書く必要はありません'A'と書くのと同じことを書いてください。 –

関連する問題