2017-04-15 239 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); 

有沒有辦法做到那?我的意思是,無需更改function text(){}this.text=function(){}

+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

您可以附加text()方法A函數,它仍然是一個對象,然後在A.prototype.other這樣使用它。

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'但它是一樣的東西。 –