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();
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();
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();
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决