JavaScript:*可以*通过调用/应用/绑定设置未定义的 属性 吗?
JavaScript: *Can* set property of undefined with call / apply / bind?
我想我刚刚发现了一个关于 JavaScript 的新奇事。
有人知道这是怎么发生的吗?
let test;
function setProp() {
this.prop = 42;
}
setProp.call(test);
// No error yet?
// So 42 should be saved inside test.prop?
// Though test=undefined?
console.log(test);
try {
console.log(test.prop);
} catch (e) {
console.log(e.message);
}
// -> undefined
// -> Cannot read property 'prop' of undefined
// Ok, indeed
function getProp() {
console.log(this.prop);
}
getProp.call(test);
// -> 42
// Wait, what?
我只是好奇 :)
在非严格模式下,将 undefined
作为第一个参数传递给 .call()
意味着您希望它成为全局对象(如 window
)。
尝试使用顶部的 "use strict";
进行测试,看看是否有所不同。
我想我刚刚发现了一个关于 JavaScript 的新奇事。
有人知道这是怎么发生的吗?
let test;
function setProp() {
this.prop = 42;
}
setProp.call(test);
// No error yet?
// So 42 should be saved inside test.prop?
// Though test=undefined?
console.log(test);
try {
console.log(test.prop);
} catch (e) {
console.log(e.message);
}
// -> undefined
// -> Cannot read property 'prop' of undefined
// Ok, indeed
function getProp() {
console.log(this.prop);
}
getProp.call(test);
// -> 42
// Wait, what?
我只是好奇 :)
在非严格模式下,将 undefined
作为第一个参数传递给 .call()
意味着您希望它成为全局对象(如 window
)。
尝试使用顶部的 "use strict";
进行测试,看看是否有所不同。