JS如何暴露特定的方法

m1方法调用到了m2,想把obj的m1方法暴露到app对象上,但不暴露m2方法,可以在不修改obj对象的基础上,使得app.m1成功打印吗

var obj = {
  m1: function () {
    console.log('m1');
    this.m2();
  },
  m2: function () {
    console.log('m2');
  }
};

var app = {
  m1: obj.m1,
};

app.m1();
阅读 5.7k
3 个回答
var app = {
  m1: obj.m1.bind(obj),
};
var obj = {
  m1: function () {
    this.m2();
  },
  m2: function () {
    console.log('m2');
  }
};

var app = {
  m1: obj.m1.bind(obj),
};

app.m1();

因为 m1:obj.m1, app.m1()调用时,其this指向的是app而不是obj,而app没有m2方法,所以报错。
其实可以用bind来赋值m1
https://developer.mozilla.org...

var obj = {
  m1: function () {
    this.m2();
  },
  m2: function () {
    console.log('m2');
  }
};

var app = {
  m1: obj.m1.bind(obj),
};

app.m1();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题