在严格模式下编写脚本时出现无法读取 属性 'any' 类型错误
getting can't read property 'any' type error when we script in strict mode
在使用 strict mode
时,我正在 type error
使用 this
访问 var
。
"use strict";
var bar = "global";
function foo() {
console.log(this.bar);
}
var obj1 = {
bar: "obj1",
foo: foo
};
var obj2 = {
bar: "obj2"
};
foo();
obj1.foo();
foo.call(obj2);
new foo();
截图:
foo();
导致了问题。如果我删除 "use strict"
一切正常。
提前致谢。
在严格模式下,当你调用一个函数而不做任何设置它的 this
时,this
是 undefined
,而不是对全局对象的引用。这是严格模式的一大区别。因此,如果您想使用对全局对象的引用来调用 foo
,您可以:
在全局范围内,执行foo.call(this);
(因为this
在全局范围内是对全局对象的引用),或者
在浏览器上,执行 foo.call(window);
(因为 window
是全局对象上的 属性,它用于指向自身——其他环境也可能有其他类似的全局变量)
这是#1 的示例:
"use strict";
var bar = "global";
function foo() {
console.log(this.bar);
}
var obj1 = {
bar: "obj1",
foo: foo
};
var obj2 = {
bar: "obj2"
};
foo.call(this); // <=== changed
obj1.foo();
foo.call(obj2);
new foo();
...和#2:
"use strict";
var bar = "global";
function foo() {
console.log(this.bar);
}
var obj1 = {
bar: "obj1",
foo: foo
};
var obj2 = {
bar: "obj2"
};
foo.call(window); // <=== changed
obj1.foo();
foo.call(obj2);
new foo();
function foo() {
console.log(this.bar);
}
'this'指的是函数foo的作用域。
您可以键入 bar,其中隐含范围为 window,即全局范围。或者您可以输入 window.bar.
function foo() {
console.log(window.bar);
console.log(bar);
}
在使用 strict mode
时,我正在 type error
使用 this
访问 var
。
"use strict";
var bar = "global";
function foo() {
console.log(this.bar);
}
var obj1 = {
bar: "obj1",
foo: foo
};
var obj2 = {
bar: "obj2"
};
foo();
obj1.foo();
foo.call(obj2);
new foo();
截图:
foo();
导致了问题。如果我删除 "use strict"
一切正常。
提前致谢。
在严格模式下,当你调用一个函数而不做任何设置它的 this
时,this
是 undefined
,而不是对全局对象的引用。这是严格模式的一大区别。因此,如果您想使用对全局对象的引用来调用 foo
,您可以:
在全局范围内,执行
foo.call(this);
(因为this
在全局范围内是对全局对象的引用),或者在浏览器上,执行
foo.call(window);
(因为window
是全局对象上的 属性,它用于指向自身——其他环境也可能有其他类似的全局变量)
这是#1 的示例:
"use strict";
var bar = "global";
function foo() {
console.log(this.bar);
}
var obj1 = {
bar: "obj1",
foo: foo
};
var obj2 = {
bar: "obj2"
};
foo.call(this); // <=== changed
obj1.foo();
foo.call(obj2);
new foo();
...和#2:
"use strict";
var bar = "global";
function foo() {
console.log(this.bar);
}
var obj1 = {
bar: "obj1",
foo: foo
};
var obj2 = {
bar: "obj2"
};
foo.call(window); // <=== changed
obj1.foo();
foo.call(obj2);
new foo();
function foo() {
console.log(this.bar);
}
'this'指的是函数foo的作用域。 您可以键入 bar,其中隐含范围为 window,即全局范围。或者您可以输入 window.bar.
function foo() {
console.log(window.bar);
console.log(bar);
}