2017-04-16 34 views
-4
class DataBase { 
    constructor(id){ 
     this.id='123'; 
} 

get_id() { return "testing";} 

} 

class User {constructor(database) { 
this.__database=database; 
console.log(this.__database.id); 
this.initfunc(); 
} 
    initfunc(){this[`get_id`]=new Function(`return this.__databse.get_id()`); 
} 
} 
var database=new DataBase(); 
var user =new User(database); 
console.log(user.get_id()); 

任何一個知道如何使用新的功能,如果結果是正確的將返回字符串測試,任何一個知道怎麼做,請幫忙,謝謝的Javascript如何使用新的功能

的期待結果是執行console.log(user.get_id()),將顯示 「測試」,但現在返回錯誤(未定義:2 回報這個.__ databse.get_id() ^

類型錯誤:無法讀取屬性未定義 'get_id' )

+2

你到底在問什麼?你遇到什麼問題?怎麼了?你期望發生什麼?他們有什麼不同? – pvg

+0

感謝您的回覆,我已更新問題 – user3035661

+1

好吧,除了一些明顯的問題,您拼錯了'__databse'。該錯誤是一個無用的東西,get_id()不能在未定義的東西上調用。 – chazsolo

回答

-1

你有一個在你的代碼中輸入錯字__databse應該讀取數據庫

class DataBase { 
    constructor(id){ 
     this.id='123'; 
} 

get_id() { return "testing";} 

} 

class User {constructor(database) { 
this.__database=database; 
console.log(this.__database.id); 
this.initfunc(); 
} 
    // typo below 
    initfunc(){this[`get_id`]=new Function(`return this.__database.get_id()`); 
} 
} 
var database=new DataBase(); 
var user =new User(database); 
console.log(user.get_id()); 
+0

感謝您的回覆。 – user3035661

+0

你的實現並不完全是這樣做的正確方法。根據評論。我的回答只是修復你的代碼。這對於未來的任何參考都是明確的。 – MartinWebb

0

這是很神祕的,你正試圖完成。從構造函數中,調用一個方法,顯然是試圖創建另一個方法。爲什麼不像往常一樣定義方法?

class DataBase { 
 
     constructor(id){ 
 
     this.id='123'; 
 
     } 
 
     get_id() { return "testing"; } 
 
    } 
 

 
    class User { 
 
     constructor(database) { 
 
     this.__database=database; 
 
     console.log(this.__database.id); 
 
     } 
 
     get_id() { return this.__database.get_id(); } 
 
    } 
 

 
    var database=new DataBase(); 
 
    var user =new User(database); 
 
    console.log(user.get_id());

作爲一個一般的經驗法則,你可以在JS編程多年,從來沒有找到一個合理的理由來使用new Function

如果出於某種奇怪的原因,你真的想要維持目前的結構的方法建立另一種方法,則只需指定功能

initfunc() { 
    const self = this; 
    this[`get_id`] = function() { 
    return self.__database.get_id(); 
    }; 
} 

或者你可以通過使用跳過所有self業務箭頭功能:

initfunc() { this[`get_id`] =() => this.__database.get_id(); }