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());
任何人都知道如何使用新的Function,如果结果正确将返回字符串测试,任何一个知道怎么做,请帮忙,谢谢
期望结果是console.log(user.get_id())将显示" testing"但现在返回错误(未定义:2 返回此.__ databse.get_id() ^
TypeError:无法读取属性' get_id'未定义的)
答案 0 :(得分: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(); }
答案 1 :(得分:-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());