JavaScript字符串在使用call和this时显示为对象
var d = {};
d.a = 'myString';
d.b = function(a) {
console.log(this);
}
d.b.call(d.a);
回答
这是因为您的脚本在非严格模式下运行。如果您添加“使用严格”,那么它会像您期望的那样工作:
"use strict";
let d = {
a: 'myString',
b: function(a) {
console.log(this);
}
};
d.b.call(d.a);
原因是在 ES6 之前,this 始终是一个对象。任何原语都将转换为对象。如果您不是在严格模式下运行,这仍然是行为。
如果无法将整个脚本置于严格模式,则只需将其应用于函数:
let d = {
a: 'myString',
b: function(a) {
"use strict";
console.log(this);
}
};
d.b.call(d.a);