Javascript如何使用新功能

时间:2017-04-16 02:16:22

标签: javascript ecmascript-6

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'未定义的)

2 个答案:

答案 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());